树莓派显示屏、触摸屏相关

分辨率设置

hdmi显示屏

设置hdmi_group和hdmi_mode,参考 http://weblogs.asp.net/bleroy/getting-your-raspberry-pi-to-output-the-right-resolution

边框设置

有些屏幕接上之后,你可能会发现有些显示区域超出屏幕边界,看不到显示的内容。或者屏幕边上有部分是黑的,没有用来显示。者可以通过修改/boot/config.txt来调节边框

 横屏/竖屏

树莓派默认横屏显示,需要改成竖屏就要进行旋转显示设置。设置display_rotate,旋转的角度是设置的值乘以90

 触摸屏

触摸屏的设置和显示屏是分开的,参考 https://www.raspberrypi.org/forums/viewtopic.php?p=425962#p425962  以及  https://www.raspberrypi.org/forums/viewtopic.php?p=426246#p426246。修改/usr/share/X11/xorg.conf.d/10-evdev.conf,根据需要设置InvertY和SwapAxes选项。InvertY将Y轴的触摸方向对掉,比如原来手向上的时候鼠标指针向下,手向下鼠标指针向上,就可以通过设置InvertY为True解决。SwapAxes将X轴和Y轴的触摸对掉,比如手原来横向移动的时候指针在垂直方向移动,手垂直方向移动的时候指针在水平方向移动,这就需要将SwapAxes设置为True

树莓派使用RFID-RC522A读卡器对IC卡进行读写(通过 python)

 

本文使用的读卡器

RFID-RC522A

1. 配置树莓派

首先需要运行raspi-config,开启树莓派的spi接口,因为RFID-RC522A读卡器与树莓派之间是通过spi协议进行通信的

https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/README.md

2. 软件安装

下载并安装SPI-Py

3. 连接树莓派与读卡器

读卡器输出端子 树莓派 Pin # 树莓派 Pin name
SDA 24 GPIO8
SCK 23 GPIO11
MOSI 19 GPIO10
MISO 21 GPIO9
IRQ None None
GND Any Any Ground
RST 22 GPIO25
3.3V 1 3V3

4. 运行测试程序

MFRC522-python 包含了几个对使用读卡器读写IC卡的例子。

测试程序需要以root用户运行,否则权限不够

Read.py读取Sector 8,如果你修改测试程序,让它读取Sector 0的数据,会发现每个Sector是16字节的数据,并且Sector 0的前面四个字节就是这张卡的UID

 

参考资料:http://www.instructables.com/id/Attendance-system-using-Raspberry-Pi-and-NFC-Tag-r/?ALLSTEPS

raspbian(树莓派)系统编译安装linphone 3.8.2

我之前的一篇文章有写过如何在ubuntu下安装linphone 3.7.0。这里讨论如何在raspbian上安装3.8.2版本,虽然操作系统和linphone版本不一样,但大部分安装步骤还是差不多的,这里只列出不同部分

基础软件包

多了libsrtp-dev

belle-sip

polarssl

没有libpolarssl5,安装libpolarssl-dev就行了

belle-sip

git checkout tags/1.4.1

ZRTPCPP

raspbian系统中g++是4.6.3版本,编译ZRTPCPP的时候会报错:cc1plus error unrecognized command line option -std=c++11。需要将g++升级为4.8.2版本,我升级的方式是通过aptitude安装g++-4.8,然后手动更新/usr/bin/g++ 以及 /usr/bin/gcc synbolic link

git checkout tags/V4.3.1

BZRTP

安装linphone之前还得安装BZRTP,直接安装master分支最新版本没问题

Linphone

git checkout tags/3.8.2

需要加-Wno-error选项,否则会出现类似”‘reverse_and_down_scale_32bytes_neon’ defined but not used [-Wunused-function]“的报错。(ubuntu编译3.8.2不需要,树莓派上编译需要指定)

同时configure的时候去掉”enable-zrtp”选项,否则会出现如下报错(安装aptitude里面的libsrtp-dev和github最新版的libsrtp都没有用)

configure: Could not find libsrtp headers or lib, cryto transport disabled.
checking for LIBBZRTP… yes
configure: error: “ZRTP requires SRTP”
configure: error: ./configure failed for mediastreamer2

 

树莓派

树莓派使用文档

https://www.raspberrypi.org/documentation/usage/

测试程序

https://www.raspberrypi.org/documentation/usage/demos/README.md

视频

  1. 摄像头模块安装和启用摄像头模块:

    https://www.raspberrypi.org/documentation/usage/camera/README.md

  2. 命令行工具获取(摄像头模块的)视频、图片。包括保存成视频、图片文件,以及预览视频:
    https://www.raspberrypi.org/documentation/raspbian/applications/camera.md预览摄像头视频:raspivid -t 60000其中-t 60000表示预览60秒。文档中提到可以使用-o选项指定输出设备,比如可以指定将捕获的视频存储成文件,或者直接输出到terminal中》直接输出到terminal中会占用较大的CPU和内存资源,一个是预览的视频会比较卡,而且会出现内存占用过多导致程序异常退出或者卡死
  3. web camera

    https://www.raspberrypi.org/documentation/usage/webcams/README.md

    安装用于读取摄像头图片的工具fswebcam
    sudo apt-get install fswebcam
    读取摄像头的一帧并保存成图片
    fswebcam image.jpg指定分辨率
    fswebcam -r 1280×720 image2.jpg移除图片中的时间条
    fswebcam -r 1280×720 –no-banner image3.jpg

  4. omxplayer 播放视频文件:

    https://www.raspberrypi.org/documentation/usage/video/README.md

音频

  1. aplay或者mplayer播放音频文件。aplay audio-file-name, mplayer audio-file-name
  2. 列出usb音频设备,可以列出带音频的usb摄像头:
    arecord -l**** List of CAPTURE Hardware Devices ****
    card 1: PCH [HDA Intel PCH], device 0: ALC280 Analog [ALC280 Analog]
    Subdevices: 1/1
    Subdevice #0: subdevice #0
    card 2: CAMERA [USB2.0 PC CAMERA], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0
    card 3: Webcam [FULL HD 1080P Webcam], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0
  3. 录音:

    https://www.raspberrypi.org/forums/viewtopic.php?p=599739#p599739

    arecord -d 10 -f cd -t wav -D hw:1,0 foobar.wav录音之前,得先打开alsamixer,将Playback的Front Mic Boost和Rear Mic Boost调到最低,Front Mic和Rear Mic静音(或调到最低);将Capture的Front Mic Boost和Rear Mic Boost调到最低。否则会出现很大的杂音。

    -d 10表示录制10秒
    -D hw:1,0表示录制的音频设备,这里的1和0分别对应前面arecord -l输出中的card和subdevice #

二维码/条形码扫描工具zxing

第一次开发安卓app,需要在app里面扫描二维码。google一下,发现安卓里面用得比较多的是zxing。实际上,zxing并不只是用于安卓。其核心代码主要就是两个功能,一个是将条码、二维码等decode成文字;再就是将文字encode生成一张二维码图片。在这个核心代码基础之上,才是面向用户的各种应用程序,比如:

  • 安卓应用程序,能够用智能手机的摄像头拍摄二维码图片,包括自动对焦;然后调用核心代码将拍摄的图片decode成文字
  • javase桌面应用,直接将一张二维码图片文件的路径作为参数传递,由核心代码将其decode成文字。
  • web应用,用浏览器将二维码图片传递到服务器,由服务器调用核心代码将其decode之后返回给用户

在zxing项目的README页面可以看到,它主要由以下几个模块组成。
阅读全文

GT-N7100刷机再探

变砖故障一:开不了机

症状:可以进入odin模式(可能又叫刷机模式、挖煤模式,通过开机的时候按音量减+HOME+电源键进入),但是不能开机,开机过程中显示固件已经损坏,并且提示可以尝试用KIES修复。不过,在这种状态下KIES是连接不上手机的,因此无能为力

解决方法:使用Odin工具刷N7100固件

刷固件步骤描述如下:

  1. 下载Odin3 v3.10原版.exe,并运行。
  2. 下载固件压缩包,KIES_HOME_N7100ZCALK5_N7100CHNALK5.zip,并解压。
  3. 手机开机,在卡住(提示固件损坏)的状态下,对运行的Odin进行如下设置:
    Odin-刷固件
    也就是说,确保”Auto Reboot”和”F. Reset Time”已经勾选,点击AP选择前面解压的固件zip中的KIES_HOME_N7100ZCALK5_N7100CHNALK5_447762_REV04_user_low_ship.tar.md5文件。然后点击”Start”开始刷固件。刷的过程在Odin上和手机上都能看到进度。固件版本应该是有要求的,我下载的是KIES_HOME_N7100ZCALK5_N7100CHNALK5.zip,这个固件刷了两次都能成功,只不过有几次是刷的过程中卡住(用电脑A),后面两次刷成功是用了另一台电脑;如果你出现刷的时候卡住,可以试着重新刷。

固件刷完后,手机就可以正常开机了。

故障二:未在网络上注册

 解决方法:

步骤:

  1. 刷cwm-root-note2.tar
  2. 刷ZCDMB1_xydd_meihua.zip
  3. 恢复EFS

git submodule

更新一个submodule的url

用例:

方法:

  1. 更新.gitmodules文件,修改对应submodule的url。

    这个文件中的submodule信息,是在git submodule add的时候写入的,并且在git submodule init的时候会读取这个文件并写入到.git/config文件中。之后的git submodule update命令从.git/config文件中读取信息以便从git服务器拉取更新。

  2. 运行git submodule sync,这会更新.git/config文件。

 

linux(ubuntu 14.04)下编译linphone-android

首先下载源代码

linphone-android实际上很多submodules,只不过,国内访问linphone.org不太稳定,所以这里不用–recursive选项同时下载submodules。linphone-android主项目代码下载完成之后,可以用git submodule status和git submodule update来查看有哪些submodules并更新,git submodule update会(重新)下载没有下载成功、或者没有下载过的submodule,尽管不稳定,尽管会经历多次连接失败,磕磕绊绊地也能慢慢全部下载完成。

代码下载完成之后,根目录下的README文件列出了编译该项目需要安装的东西:

  1. Android sdk
    下载并解压Android sdk,然后使用SDK Manager下载最新的platform-tools和tools,以及其他安卓开发需要的组件。参考搭建linux(ubuntu 14.04)下的android开发环境
    将platform-tools和tools子文件夹目录添加到PATH环境变量中,假设Android sdk解压到/home/yanzs/android/android-sdk-linux,那么PATH的配置为在~/.bashrc末尾添加下面几行:
  2. 安装几个工具

    确保系统中有这几个工具:autoconf, automake, aclocal, libtoolize, pkgconfig(README文件的说法,应该是ubuntu系统里的pkg-config)。没有的话找到相应的软件包进行安装,我的系统里面这些工具都有了,所以也不知道是哪个软件包带的。
  3. (仅针对64位操作系统)安装ia32-libs,参考 http://stackoverflow.com/a/23194339/1033539


    README里面提到安装下列软件包,不懂是作为ia32-libs的安装方法,还是另外的需要,我也一并装了
  4. 下载Android NDK(要求r10c版本),如果你的系统时64位的,这一步得在上面第三步之后进行,因为下载的64位Android NDK其实包含32位的程序。可以从Android NDK页面下载最新版本,这个页面也有安装方法说明。除此之外 AndroidDevTools 也提供了几个版本的Android NDK的百度网盘下载地址。将Android NDK解压,并按照上述同样的方法将解压后的路径添加到PATH环境变量中。

至此,准备工作完毕,可以直接运行make命令进行编译,保险起见make之前先clean一下

编译需要一会儿,编译成功treminal的输出是这样的

linphone-android-make-successful

所以,如果你在最后看到error,但是不相信命运往回找successful时,也许你能找到,但你只要告诉自己不能哭就行了。编译成功的话,生成的apk文件存放在bin目录下

将安卓手机用usb线连接电脑,运行make install就可以将前面编译好的apk文件安装在手机上了。

============================================================================

以上是采用命令行编译的方式,我们还可以使用Android开发工具来编译源代码。

需要注意的是,使用Android开发工具之前也得先用命令行编译一遍,这可能是因为命令行编译会同时编译C语言源代码部分。如果在命令行编译之前直接用开发工具编译,linphone安装在手机上的时候会不能启动。

我这边采用Android Studio来编译。在我下载的版本里面,linphone源代码应该是用Eclipse创建的,因此Android Studio不能直接打开,得按下图导入:

Screenshot from 2015-04-08 19:58:56

 

导入Android Studio之后的编译就比较简单了。

============================================================================

PS: 本文编译的linphone-android代码版本截图如下,如果你编译其他版本的代码不成功,也有可能是该版本源代码的bug,可以试试这个版本,如果编译成功,也能让自己斗志昂扬

linphone-android-gitk-revision

搭建linux(ubuntu 14.04)下的android开发环境

对于刚开始学习android开发的人来说,android开发环境的搭建还是比较复杂的,不仅在于需要理解各种概念、工具的作用,他们的关系;更是由于这些工具的开发者,google,的网站在国内是访问不了的。本文就来介绍一下如何从零开始搭建android开发环境,创建一个hello world手机app,并运行于AVM和智能手机上。

一、安装JDK

首先,安卓app使用java语言开发,因此编译app程序少不了JDK。而且,后面会提到的SDK Manager,以及Android Studio的运行也需要安装JDK(要求JDK7及以上的版本)才能启动。 虽然ubuntu的软件库里面有openjdk-7-jdk,可以很方便的安装,但android推荐使用oracle提供的JDK。Oracle版本的JDK8可以从官方页面下载,或者使用我的百度网盘分享。如果使用Oracle版本,记得把openjdk卸载掉。 下载之后解压,假设解压到/home/yanzs/java/jdk1.8.0_40。然后需要设置JAVA_HOME和PATH环境变量,方法是在~/.bashrc文件末尾添加:

这个设置对之后打开的terminal有效,要使其现有terminal有效,在对应的terminal窗口执行”source ~/.bashrc”命令(不包括引号)。 设置JAVA_HOME环境变量之后,Android Studio会自动使用这个版本的JDK。

二、安装SDK tools(不区分32位与64位)

SDK tools

开发安卓应用程序,涉及到对硬件的访问,以及界面设计中使用的控件等,这些功能都由Android API提供,并且有不同的版本。SDK tools提供了一系列工具,其中包括SDK Manager。SDK Manager可以下载、升级各个版本的Android API;并且管理一些工具,比如Platform-tools,Build-tools(有多个版本),甚至SDK tools本身。另外,SDK tools还提供了AVM(安卓设备模拟器)管理工具。 以上所说的,Android API,SDK tools,Platform-tools,Build-tools还有一些其他扩展接口,统称为Android SDK。不像其他框架的SDK,Android SDK分成各个组件,要通过SDK Manager来下载,所有没有一个下载Android SDK的页面、地址,只有SDK tools的下载地址。这也是会给初学者造成很大困扰的原因。 只不过,下载了SDK tools之后,其中的SDK manager以及通过SDK manager下载的其他组件都在SDK tools文件夹之下,可以真个拷贝到其他开发机子上,方便共享,这就是在网上能够找到的所谓”非官方版”或者”完整版”,”更新到XXX的版本”。 我们这里下载官方的SDK tools,下载地址见Android SDK下载页面末尾,SDK Tools Only部分。选择对应操作系统的版本,我这里下载linux版本,下载后解压,假设解压到/home/yanzs/android/android-sdk-linux目录。

使用SDK manager安装Android API

运行SDK tools目录下的tools/android打开SDK manager

SDK-Manager-without-proxy-setting-use-https SDK Manager每次运行的时候,都会连接服务器,获取最新的组件列表,对比当前已经安装了的组件,以便用户进行安装、升级。从上图可以看到,SDK Manager获取组件列表的时候出错了,这很可能是因为它用https协议访问服务器,而JDK里面又没有安装对应的证书,参考http://www.java-samples.com/showtutorial.php?tutorialid=210。不过,我们这里不通过给JDK安装证书来解决问题,直接设置SDK Manager,使其强制使用http协议就行了。 通过菜单”Tools/Options…”打开配置窗口。 SDK-Manager-options 勾选”Force https://… sources to be fetched using http://…”,我这里同时设置了HTTP Proxy Server和HTTP Proxy Port,这是设置SDK Manager通过代理下载组件列表,以及下载组件本身。如果没有设置代理,会出现部分组件列表加载不了的情况,如下图。 SDK-Manager-without-proxy-setting 关于代理的设置参考AndroidDevTools,这个网站整理了很多安卓开发工具(包括本文提到要下载的所有软件包),并用百度网盘分享,值得拥有。经过这些设置之后, 就可以正常加载组件列表并下载组件了。 SDK-Manager-initially-opened 可以看到,Android SDK Tools已经安装了,这是理所当然的,因为我们下载的就是SDK Tools。 另外,可以看到SDK Manager自动帮我们勾选了一下tools和API,这些都推荐安装。需要注意的是,默认SDK Manager只会勾选最新版本的Android API,后面创建的安卓应用程序尽管是使用这个版本的API,但只要不调用新版本才提供的接口,就仍然可以在低版本的安卓手机及AVM上运行。除了默认勾选的组件之外,参考下面的两个页面,可以选择安装其他一些组件。如果有些组件没有安装,可能连Hello World程序都编译不过:

选择好后,点击”Install XX packages”按钮开始下载安装,文件比较大,看一部电影再回来。

一般的Android开发就这样下载好Android SDK和各组件,然后在下面说到的Android Studio里面配置Android SDK根路径就行了。但是有些开源项目会要求你设置ANDROID_HOME环境变量,或者将SDK根目录以及tools、platform-tools子目录添加到PATH中。这里都提前设置好:

三、安装Android Studio(不区分32位与64位)

Android Studio可以从Android SDK下载页面下载,从说明中可以看到,这个Android Studio集成了SDK Tools等一些组件。问题是,Android Studio运行的时候会自动下载一些SDK组件,而且在组件成功下载之前你还不能打开SDK Manager进行前面说过的https和代理设置,因此不能成功下载组件。。。这就是为什么我们前面单独下载SDK Tools Only的原因。 假设Android Studio解压到/home/yanzs/android/android-studio。运行之前,需要进行设置,使其跳过前面说过会导致问题的自动下载SDK组件这一步骤。打开bin/idea.properties文件,在末尾添加一行:

然后可以运行bin/studio.sh打开Android Studio。在创建/打开安卓项目之前,需要先配置Android SDK路径,以及JDK路径。 android-studio-configure android-studio-project-defaults android-studio-project-structure android-studio-sdk-location Android Studio的设置可以参考Android studio 1.1.0 Hello world!。 至此,开发环境算是设置完了。 接下来就可以创建Hello World了。

四、Hello World!

在初次运行Android Studio打开的”Welcome to Android Studio”窗口,点击Start a new Android Studio project按钮创建项目,向导会指引你选择模板,选Blank Activity就可以了。创建好之后会进入Android Studio IDE,之后每次打开Android Studio也会直接进入IDE。 这样创建的App就是一个Hello World程序。 android-hello-world-run 点击工具栏的运行按钮开始执行,如果必要的组件都有安装,编译成功之后会让你选择一个AVM或者连接的Android手机进行测试,过程就不细说了。如果编译失败,返回前面使用SDK manager安装Android API一节,确保安装了需要的组件。