基于I-MX287A的mqtt远程控制ARM板上LED灯小项目总结

      最近在学校linux嵌入式技术,自己做了一个在周立功的I-MX287A开发板上实现的,基于MQTT远程控制的小项目,其中用到了一些比较好玩和有趣的技术,在这里自己记录分享一下。

    额,让我想想该从和处开始写起吧!

一、开发板上电进行工作环境配置

1.1 网络配置

刚拿到I-MX287A时,心情还是很激动的,因为天生对硬件开发板有着一见钟情的习惯,嘿嘿。

拿到板子首先做的是给板子连接上串口线,再给板子插上电源;用串口调试终端给i-mx287A设置工作环境,配置工作环境是每拿到一个板子时一定要做的事,环境配置的好,可以大大提高板子的开发效率。

之前有接触过ARM开发,用的开发方式是通过串口给ARM板下载应用程序的,这时需要用到的工具软件是tftpd32.exe和SecureCRT.exe,当然实际工作中也有不少人使用这两款软件进行嵌入式开发。这里我使用的是另一个工具,既可以连接串口也可以连接网络,它是putty,打开界面如下图:

连接好串口线后,在电脑设备管理器找到串口线的设备串口com,照着上图配置波特率115200,点击open,会出现一个黑色的终端窗口,其中会显示ARM板的状态,如下图:

进去之后需要用户登录,这个是致远科技I-mx287A板子默认的用户,用户名和密码都是root,输入进去就可以登录到板子了,进去之后第一件事当然是打一个"ls"命令啦。在root用户下,新的板子的文件系统有写保护,你会发现在/etc/init.d/路径下的文件没有写权限,即使加了万能的sudo也不行,后来在同事的帮助下,了解到一个骚操作即可解决这种写保护问题:

输入如下指令:

mount -o remount rw /

后来发现是因为板子的文件系统root路径默认挂载的是只读的模式,我们把根文件系统从新挂载成可读可写模式就可以修改/etc/下的文件内容了。如果板子重启了,每次都要打一遍这条指令就非常烦,干脆把这一条写到启动脚本文件里,让其上电就重新挂载一下,方便配置文件的写修改。我是将这一条shell指令添加到/etc/init.d/路径下的rcS问价的最后一行。

如下图:

配置可写权限后,我们需要连接配置开发板的网线网络,输入如下图指令测试开发板网络是否畅通。

我们可以用ifconfig命令来查看网络参数,网络不外乎ip、默认网关、子网掩码、DNS服务器。这几个参数需要你配置成与你电脑所在的局域网一致的(ip不能冲突)。/etc/init.d/路径下有个名为“S40network”的文件,它是启动时加载的网络参数shell脚本,新板子里面只启用了ip设置的命令,我后来直接自己找网上历程写了一个脚本,初始成自己网路的参数,即把S40network内容改为如下配置:

#filename S40network
#!/bin/sh
IP=192.168.0.97
NETMASK=255.255.255.0
DNS='nameserver 192.168.0.1'
GATEWAY=192.168.0.1
ifconfig eth0 ${IP} netmask ${NETMASK}
route add default gw ${GATEWAY}
echo ${DNS} >> /etc/resolv.conf  #resolv.conf文件中写"nameserver 192.168.0.1"
#挂载nfs
mount -t nfs -o nolock 192.168.0.110:/home/nfs/share /mnt

进行如下设置后,即可配置开发板的网络,文件保存退出,重启开发板reboot,等板子正常启动后,用putty的telnet工具连接开发板(网线插上)如下图配置putty

配置完成后,点击open,如果一切正常(网络),应该可以看到如下图终端界面

此时,开发板的网络环境算是配置好了,配置网络的用途是板子可以通过网路与电脑上的虚拟机Ubuntu建立网络连接,从而试下共享文件系统nfs.

1.2 nfs挂载

nfs是网络文件系统,允许一个节点通过网络访问远程计算机的文件系统,远程文件系统可以被直接挂载到本地,文件操作和本地没有区别,如果是局域网的nfs那么io的性能也可以保证。那么就是说,当开发板的nfs挂载到ubuntu上,就可以直接访问Ubuntu上编译好的可执行文件,直接运行都是可以的,在板子上开发调试应用软件的时候,无需再将可执行文件考来考去,大大方便了软件的调试效率。

ubuntu下nfs安装配置:
1).安装NFS服务器——

sudo apt-get install nfs-kernel-server(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap)

2).配置nfs

sudo vim /etc/exports     

在末尾一行加入/home/nfs *(rw,sync,no_root_squash,no_subtree_check)

3).注意:修改后,要在linux中断 运行exportfs -rv  使配置文件/etc/exports 生效 ;
设置 /home/nfs目录权限sudo chmod 777 /home/nfs -R

4).重启服务:#sudo /etc/init.d/rpcbind restart <---重启portmap,后面最新的版本都rpcbind
重启#sudo /etc/init.d/nfs-kernel-server restart <---
重启nfs服务#showmount -e <---显示共享出的目录

5).现在可以在开发板上试一下:
mount -t nfs -o nolock localhost:/home/nfs /mnt
注:localhost为虚拟机机Ubuntu的IP地址,nsf挂载成功的前提是,arm板能正常ping通ubuntu。

挂载成功后,板子就可以直接访问Ubuntu的/home/nfs路径下所有文件,板子上需要执行如下指令:

cd /mnt/

来访问挂载的nfs文件路径。

1.3 内核在Ubuntu上编译

刚一接触开发板,想到内核编译时有些惧怕的,因为想到内核一出问题,整个系统都有可能会崩。想想还是挺恐怖的,但是好在致远电子i-mx287A开发板提供的资料比较全面,在《EasyARM-iMX28xx Linux开发指南 20150901 V1.03.pdf》文档中有对内核及u-boot编译的详细描述和操作指导,编译不通过,大不了删了再来,哈哈。

但是按照文档里一步一步执行,一般不会有问题。

1.4 ARM板硬件驱动交叉编译

1.5 驱动调用测试

 二、Ubuntu上QT应用工程创建及开发

2.1 QT4.7交叉编译配置

2.2 QT4.7交叉编译应用程序,并在ARM9开发板上运行

2.3 QT应用程序调用之前编译好的板子上跑的硬件驱动实现led灯Gpio控制

2.4 QT4.7应用程序中调用libpaho-embed-mqtt3c.so.1.0动态库实现mqtt订阅和发布数据

2.5 QT4.7应用中通过多线程实现mqtt数据订阅和发布功能,并实现远程mqtt控制led开关

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/86515753