引 言 智能鸡蛋盒作为智能家居的一类产品,它解决了人们一直烦恼的忘记家里鸡蛋数量和忘记鸡蛋是否新鲜的问题。本论文实现了把鸡蛋数量和储存时间等数据传输到Android 客户端,并记录的功能,用户可以随时查看鸡蛋盒里鸡蛋的数量并检查鸡蛋是否新鲜。 1 智能鸡蛋盒的设计 1.1 硬件电路的设计 在设计硬件方案时,需要考虑以下几个因素: (1) 该智能鸡蛋盒在低温封闭的环境中工作,所以芯片以及其它元器件必须具备能在低温环境下正常工作的能力; (2) 由于是在冰箱内工作,所以无线网络要有一定的无线穿透能力。 经过一系列调研后,发现 RT5350 这款自带无线功能的主控芯片能满足本项目的基本要求,而其他元器件如电阻、电容、LED 灯也能在低温下正常工作。RT5350 是Ralink 公司在 2010 年左右推出的一款单芯片,其内部集成了基带处理器、射频、功率放大器以及一颗高性能的 MIPS 24Kc CPU 内核(最高主频为 360 MHz),一个基于 Ralink RT5350 的五端口百兆以太网交换机[1],所以仅需很少的外围元器件就可以实现低成本的2.4GHz 802.11n 无线产品。本文将RT5350 作为主控芯片, 采用距离传感器检测鸡蛋是否存在,不使用压力传感器的原因在于压力传感器的功能是检测压力大小,无法直接检测鸡蛋的有无,而距离传感器可以比较直接的检测出一定距离内是否有物体存在。 智能鸡蛋盒与手机客户端建立TCP/IP 连接,通过距离传感器检测鸡蛋数量,同时将这些数据通过引脚口的高低电平传递给主控芯片,主控芯片经过简单处理后将这些信息通过 TCP 传输给手机客户端。总设计框图如图 1 所示。 1.2 Android客户端的设计 智能鸡蛋盒Android 客户端整体的框架设计采用状态栏 ActionBar、 切换页面, 使用 ViewPager 与 Fragment 进行界面显示,使用ListView 和自定义的 Adapter 展示数据列表,采用popWindow 组件显示鸡蛋盒里鸡蛋存放的时间[2], 选择在 Android3.0 之后出现的 ActionBar 来实现标题显示, 为了能够让 ActionBar 的标题居中显示,我们采用自定义的ActionBar。 在底部栏的选项卡里,文字采用TextView,图片采用自定义的开源框架SVGView,原因在于传统的 Bitmap(位图)通过在每个像素点上存储色彩信息来表达图像,而SVG 是一个绘图标准。与Bitmap 相比,SVG 放大后不会失真,且Bitmap 需要为不同的分辨率设计多套图标,而矢量图则不需要。 2 智能鸡蛋盒的实现 2.1 硬件电路的实现 本软件设计是在虚拟机上的UBUNTU 系统上对OpenWrt 系统进行裁剪,并通过编写程序来完成。首先要构建编译环境,然后下载并配置 OpenWrt,完成基本的配置后,编译利用UBUNTU 系统自带的VI 编辑器编写驱动、程序以及MAKEFILE,最后对整个 OpenWrt 系统进行编译,编译完成后生成一个固件,利用串口调试助手SecureCRT 和tftpd32 软件将固件烧录到RT5350 芯片上[3]。 2.2 硬件程序的编写 硬件程序的编写需先打开设备驱动节点并初始化,等待 2.3 Android客户端的实现 Android 客户端的主要核心模块是和硬件通讯以及把硬件采集的数据显示到客户端。该模块主要技术包括Socket 通讯、Service 后台、BrodcastReceiver 通讯、Thread 线程以及Java 语言的反射技术。目前暂时定位 8 个鸡蛋的原因是Socket 通讯时,在硬件上的开发语言是 C,而C 的一个字符为 8 个字节,因此暂时定位发送一个通讯逻辑。根据需求分析,在与智能鸡蛋盒通讯时,我们需要采用 Socket 长连接通讯机制, Socket 基于TCP/IP 协议,为 Client、Service(C/S)连接方式。智能鸡蛋盒硬件电路作为 Server 端,而App 作为 Client 端, Client 需要保持长连接,就需要通过发送心跳包来与Server 保持长连接,并且 Android 系统的机制不能堵塞 UI…