Android通过WIFI控制“数码管”
一、 硬件平台
1) MINI6410开发板;
2) Android手机一部;
3) 无线路由器一台;
4) 自制“一位数码管”显示板;
二、 简介
本示例是通过TCP协议进行通讯的,MINI6410运行TCP服务器程序,Android手机运行客户端程序,“客户端”通过WIFI将“按键信息”传递给“服务器端”,“服务器端”通过解析收到的“按键信息”来控制“数码管”,本示例包含:“数码管硬件的制作”,“linux下数码管的驱动代码”,“linux下TCP服务器代码”,“Android客户端控制程序”,文末将贴出链接。
三、 控制效果
1) Android控制界面
2) 整体控制照片
四、 自制“一位数码管”显示板
1) 原理图
2) 说明
a) 数码管采用的是“共阳”接法,当GPIO端口“拉低”时,即可点亮数码管;
b) MINI6410的“GPIO PORT”不是“2.54mm”标准接插件,而是“2.0mm”的接插件,可以考虑在“淘宝”购买“一端是2.54mm的,另一端是2.0mm”的“杜邦线”;
c) VDD_IO串入了一个R=100欧姆的电阻,是为了防止电流过大烧毁数码管。
五、 Linux下数码管的驱动
1) 复制文件
a) 复制“Android通过WIFI控制数码管\linux数码管驱动代码\seg_leds.c”到“/opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char/”文件夹;
b) 复制“Android通过WIFI控制数码管\linux数码管驱动代码\gpio-bank-m.h”到“/opt/FriendlyARM/mini6410/linux/linux-2.6.36/arch/arm/mach-s3c64xx/include/mach”文件夹;
注意:如果没有复制该文件,编译内核时会报如下错误:
CC drivers/char/seg_leds.o
drivers/char/seg_leds.c:30:30:fatal error: mach/gpio-bank-m.h: No such file or directory
compilationterminated.
make[2]: ***[drivers/char/seg_leds.o] Error 1
make[1]: ***[drivers/char] Error 2
make: *** [drivers] Error 2
2) 修改配置文件Kconfig和Makefile
a) 进入“/opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char”文件夹;
b) 在终端中输入“gedit Kconfig”;
c) 在110行左右,找到:
config MINI6410_LEDS
tristate "LED Support for Mini6410GPIO LEDs"
depends on CPU_S3C6410
default y
help
Thisoption enables support for LEDs connected to GPIO lines
on Mini6410 boards.
在其前面加入如下代码:
config SEG_LED_DISPLAY
tristate "SEG_LED_DISPLAY Support forMini6410 GPIO SEG_LEDs"
depends on CPU_S3C6410
default y
help
Thisoption enables support for SEG_LEDs connected to GPIO lines
onDIY boards.
提示:可以先复制一份“config MINI6410_LEDS”,在此基础上修改成
“config SEG_LED_DISPLAY”。
d) 在终端中输入“gedit Makefile”;
e) 在110行左右,找到:
obj-$(CONFIG_MINI6410_LEDS)+= mini6410_leds.o
在其前面加入如下代码:
obj-$(CONFIG_SEG_LED_DISPLAY) += seg_leds.o
六、 配置编译内核
1) 配置内核
a) 进入“/opt/FriendlyARM/mini6410/linux/linux-2.6.36”文件夹;
b) 在终端中输入“cp config_mini6410_n43 .config”;
c) 若有“cp: overwrite`.config'?”提示,输入:“y”;
d) 在终端中输入“make menuconfig”;
e) 调整“光标上下键”à选中“DeviceDrivers”à回车;
f) 调整“光标上下键”à选中“Characterdevices”à回车;
g) 调整“光标上下键”à选中“SEG_LED_DISPLAYSupport for Mini6410 GPIO SEG_LEDs”à“空格键”切换到“<*>”状态;
h) 调整“光标左右键”à选中“<Exit>”à“回车”退出à出现如下界面时à选中“<yes>”à“回车”保存退出;
2) 编译内核
a) 进入“/opt/FriendlyARM/mini6410/linux/linux-2.6.36”文件夹;
b) 在终端中输入“make”;
c) 待终端出现如下信息时,编译完成;
OBJCOPY arch/arm/boot/zImage
Kernel:arch/arm/boot/zImage is ready
Building modules, stage 2.
MODPOST 20modules
d) 进入“/opt/FriendlyARM/mini6410/linux/linux-2.6.36/arch/arm/boot”文件夹复制“zImage”到SD卡中的“images\Linux”文件夹下并重命名为“zImage_n43”;
e) 修改SD卡中“images”文件夹下的“FriendlyARM”文件OS=Linux;
f) 插入SD卡,选择“SD启动”,打开“MINI6410”电源,安装Linux;
g) 待安装完成,断电,切换到“flash”启动,重新开机;
h) 打开“MINI6410的超级终端”,输入“ls /dev”,可以看到“seg_leds”设备驱动。
七、 linux下TCP服务器代码
1) 复制文件
a) 复制“Android通过WIFI控制数码管\linux数码管驱动代码\seg_leds_tcp_server.c”到fedora下;
2) 交叉编译
a) 在终端中输入“arm-linux-gccseg_leds_tcp_server.c -o seg_leds_tcp_server.o”;
b) 成功编译后,在当前目录下会生成“seg_leds_tcp_server.o”文件;
3) 通过ftp将文件传到“MINI6410”
a) 连接“MINI6410”到无线路由器上;
b) 连接PC到相同的无线路由器上
c) 在PC终端中输入“ftp192.168.1.108”;
d) 输入“用户名”“plg”,密码“plg”;
e) 输入“bin”设置以“二进制”的方式传输;
f) 输入“putseg_leds_tcp_server.o”将“seg_leds_tcp_server.o”文件传到“MINI6410”的“/home/plg”目录下;
g) 输入“bye”退出ftp连接;
4) 修改权限和运行
a) 打开“MINI6410”的“超级终端”,输入“cd /home/plg”;
b) 在终端中输入“chmod 777 seg_leds_tcp_server.o”修改权限;
c) 在终端中输入“./ seg_leds_tcp_server.o”运行服务器代码;
d) 服务器代码会打印“客户端的IP地址”,以及收到的“字符”和“字符的长度”。
八、 android控制程序
1) 安装应用程序
a) 打开“Android通过WIFI控制数码管\Android客户端程序”文件夹;
b) 安装davis_seg_leds.apk;
c) 安装时可能会提醒是否允许操作硬件,请允许,该程序只操作手机震动!
2) 使用说明
a) 打开手机的WIFI;
b) 连接手机到“连接有MINI6410”的无线路由器上;
c) 打开应用程序;
d) 键盘0~9:数码管显示按键的数字;
e) 键盘*:数码管关闭所有的显示;
f) 键盘#:数码管打开所有的显示;
g) 控制成功,手机会震动提醒,控制失败以Toast方式提醒;
h) 程序退出时会关闭数码管显示。
九、 代码附件
Android通过WIFI控制数码管.rar