创新创客智能硬件平台——温湿度传感器
- 前言
- 准备环节
- 修正错误代码
- 测试环节
- 编译驱动和测试代码
- 加载驱动并执行代码
- 疑难杂症解决方案----网络设备未定义
前言
从本篇起,将正式进入实践环节。传感器、模块实验前的准备环节基本相似,若无特殊说明,进行后续实验时请参考本篇的准备环节。
准备环节
请使用默认的Linux源代码编译生成的zImage、设备树、引导程序、根文件系统。默认内核中包含了USB无线蓝牙网卡的驱动程序,若后续执行联网出现未定义设备失败时,请参考文章末尾的解决方案。默认设备树包含了本入门教程的全部传感器引脚配置,若修改了设备树将可能导致默认驱动和测试代码无法正常运行,若出现设备树问题,请阅读修改温湿度传感器默认接口,理解设备树规则,并依此查找设备树存在的问题。
(1)首先在 转接板 上找到黑色的拨码开关,将开关拨为 1 1 0 1 0 1 1 0。此时表示开发板上电后将从eMMC启动,可以运行系统。
(2)将 12V DC直流供电电源线 一端插入供电插座,另一端插入底板的12V圆形电源输入接口。将串口线一端插入电脑的USB接口中,另一端的Mini USB接口插入 底板的Mini USB串口COM1 TO USB处,找到USB无线蓝牙网卡,并插入到 底板的USB接口 处,在实验箱中找到温湿度传感器以及对应线材,将温湿度传感器连接线材的一端,另一端连接 底板的P8接口,插入设备时请注意方向,严禁反插。标准的传感器模块、底板接口以及线材已经做了防呆接口(防反插接口),但是防呆不防傻,千万不能大力出奇迹,否则将 极易损坏接口、烧毁传感器或模块。
(3)在宿主机中打开串口通信软件,本例中使用MobaXterm。根据设备管理器中找到的串口号进行连接,波特率设为 115200,然后拨动底板的电源开关,使开发板上电工作,此时应该可以看到宿主机显示开发板打印的启动信息。
(4)当开发板启动完成后,按下Enter会显示登录提示,输入 root 来登陆root账户,没有密码,直接登陆。
(5)登陆后创建脚本文件,用于快速连接wifi获取网络。输入 nano wifi_setup.sh 来创建并编辑脚本文件,具体的脚本文件名字可以根据喜好自行命名,尽量做到见名知意。
(6)复制以下代码,并修改__SSID__为wifi热点的名称,修改__PASSWORD__为wifi热点的密码,修改192.168.43.3为开发板合适的静态ip,修改192.168.43.1为wifi热点的网关地址。
脚本主要配置了wpa_supplicant文件,设置了静态ip,设置了默认网关,设置了DNS服务器地址,启用了wlan0的无线网络接口。
#!/bin/bash
echo change wpa_supplicant
rm -f /etc/wpa_supplicant.conf
echo "ctrl_interface=/var/run/wpa_supplicant" >> /etc/wpa_supplicant.conf
echo "ctrl_interface_group=0" >> /etc/wpa_supplicant.conf
echo "update_config=1" >> /etc/wpa_supplicant.conf
echo "network={" >> /etc/wpa_supplicant.conf
echo ' ssid="__SSID__"' >> /etc/wpa_supplicant.conf
echo ' psk="__PASSWORD__"' >> /etc/wpa_supplicant.conf
echo "}" >> /etc/wpa_supplicant.conf
echo ifconfig wlan0 up
ifconfig wlan0 up
echo wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
echo ifconfig wlan0 192.168.43.3
ifconfig wlan0 192.168.43.3
echo route add default gw 192.168.43.1 dev wlan0
route add default gw 192.168.43.1 dev wlan0
echo change DNS_Settings
rm -f /etc/resolv.conf
echo "nameserver 119.29.29.29" >> /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 1.1.1.1" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
(7)在串口软件中将修改好的代码输入进nano编辑器,保存退出即可。本例中MobaXterm支持右键粘贴功能和左键复制功能。将修改好的代码复制,在MobaXterm中右键,此时会提示输入的内容有换行符号,若在命令行中粘贴将导致执行被换行的语句。但由于我们是在nano编辑器中,所以可以直接点击OK确认粘贴,粘贴后需要检查语句是否和本文的排版一致,尤其是过长的语句在粘贴时会导致自动换行,请检查无误后保存退出。
(8)在串口软件中输入 chmod +x ./wifi_setup.sh 使脚本具有可执行权限。
(9)输入 ./wifi_setup.sh 即可运行刚刚写好的脚本,耐心等待15秒左右,即可成功连接wifi。若连接失败,请检查wifi名称、wifi密码是否正确,检查wifi信号是否良好,并重启开发板,按上面的步骤重新尝试。以后重启后可以直接执行本脚本连接网络,无需重新创建。若提示设备未定义,则请见末尾的解决方案。
(10)输入 ifconfig 检查开发板的网络状况,双向执行 ping 命令检查开发板和虚拟机之间的网络是否联通。
(11)输入 mkdir * 创建文件夹用于挂载NFS共享,其中 * 需要替换为合适的文件夹名称,可以自行命名。本例中可以执行 mkdir jiuzhea。
(12)输入 mount -t nfs xxx:* *** 来挂载NFS共享,其中xxx表示虚拟机的ip地址,*表示虚拟机开放共享的目录,***表示开发板用于挂载的目录。本例中可以输入mount -t nfs 192.168.43.102:/home/uptech/jiuzhea ~/jiuzhea。
(13)找到文件资料中本实验的需要的代码,温湿度传感器代码位于/01 创新创客智能硬件平台光盘资料/创新创客智能硬件平台光盘V1.0/02_模块/0201_Linux/01_必备模块/25_温湿度传感器/源码/SHT11,并复制到虚拟机中的NFS共享目录中。然后在串口软件上输入cd *进入NFS共享目录,* 需替换为实际的共享目录,本例中输入 cd ~/jiuzhea,最后输入 ls -a 即可查看共享目录中存放的文件了。
修正错误代码
原版的代码有错误,请将文件资料中对应的驱动代码SHT11_driver.c打开,在930行处可以看出此处曾被用于测试修改引脚,需要取消937行的注释,注释938行,取消961行的注释,注释962行,取消969行的注释,注释970行,然后保存并退出。
测试环节
编译驱动和测试代码
(1)在虚拟机中打开终端,使用cd命令切换到NFS共享的路径下,本例中可以输入 cd /home/uptech/jiuzhea,请根据实际情况修改命令。
(2)输入 cd SHT11/driver 进入温湿度传感器的驱动文件夹,输入 make clean 清空以前的生成文件,再输入 make 即可完成驱动的编译,输入 ls -a 可以看到驱动文件SHT11_driver.ko已经生成。
(3)输入 cd ../test 进入温湿度传感器的测试代码文件夹,同样输入 make clean 清空,输入 make 完成编译,输入 ls -a 可以看到测试文件SHT11_test已经生成。
加载驱动并执行代码
(1)在串口软件输入 cd ~/jiuzhea 进入开发板挂载的NFS共享目录,请根据实际情况修改代码。
(2)输入 cd SHT11/driver 进入驱动文件夹,输入 insmod SHT11_driver.ko,加载驱动。
(3)输入 cd ../test 进入测试文件夹,输入 ./SHT11_test 即可执行测试文件,如图所示,温湿度传感器每秒采集一次数据,并将结果打印到串口。此时可以用手触摸温湿度传感器,温度和湿度会逐渐上升,松手后会逐渐下降。
(4)终止程序可以按下快捷键 Ctrl + C,此时输入 lsmod 可以看到,驱动是被加载的状态,可以输入 rmmod SHT11_driver 来卸载驱动,卸载后再次输入 lsmod 可以看到驱动已经不在列表中。卸载驱动可以直接进行后续的传感器、模块实验,避免引脚冲突占用,而不需要重启开发板。
疑难杂症解决方案----网络设备未定义
原因:编译内核时未选中网络设备驱动。
解决方案:参考文件资料/01 创新创客智能硬件平台光盘资料/创新创客智能硬件平台光盘V1.0/02_模块/0201_Linux/01_必备模块/40_USB WiFi-BT/USBWiFi_BT模块实验指导书.pdf。
- 首先在虚拟机终端中输入cd /home/uptech/fsl-6dl-source/kernel-3.14.28/,由于默认情况下已经将USB无线蓝牙网卡的驱动配置并拷贝至内核驱动目录中,所以可以直接输入make menuconfig进入内核可视化配置菜单。请注意,此处如果终端过小,可能无法正常显示菜单,需要将终端窗口放大重试。
- 在菜单中使用上下方向键找到Device Drivers,按Enter进入子目录,同理找到Network device support–>Wireless LAN–>Realtek 8723B USB WiFi,按下空格切换状态,直到Realtek 8723B USB WiFi前面一对尖括号内显示< * >,表示将此项编译进内核。再使用左右方向键,选择Save进行保存,再选择Exit退出菜单。
- 最后重新编译内核、编译设备树,将两个文件重命名后覆盖到烧录工具对应的目录中,重新烧录板子即可。