网站开发有哪些框架,惠州地区网站建设公司,wordpress管理账户,驻马店重点项目建设网站#x1f431;作者#xff1a;一只大喵咪1201 #x1f431;专栏#xff1a;《智能家居项目》 #x1f525;格言#xff1a;你只管努力#xff0c;剩下的交给时间#xff01; 这篇文章中#xff0c;本喵将使用RT-Thread Studio来实现这个智能家居的项目#xff0c;最终… 作者一只大喵咪1201 专栏《智能家居项目》 格言你只管努力剩下的交给时间 这篇文章中本喵将使用RT-Thread Studio来实现这个智能家居的项目最终效果和前面的裸机版本以及FreeRTOS版本一样。在这里本喵将让大家体验到RT-Thread Studio的便利。
创建工程
首先打开 RT-Thread Studio 软件如何安装该软件本喵就不讲解了直接去官网下载安装即可。 如上图打开软件以后关闭掉欢迎界面然后按照图中的步骤来操作
点击左上角文件中的新建选择 RT-Thread 项目。 RT-Thread项目是标准工程它包含RT-Thread的所有功能可以安装大量的组件。RT-Thread Nano项目是简化版本它包含的功能和FreeRTOS一样仅支持任务任务间通信等等不支持组件。 输入工程名字和工程文件保存路径。 如果使用缺省位置则会保存到RT-Thread Studio的安装路径下的某一个文件中。 选择芯片型号和控制台端口以及调试端口。 根据芯片的厂商选择相应的型号本喵这里选择的是STM32F103ZE。选择控制台所用的串口该控制台就像是板子上运行的一个shell。选择调试器以及接口类型有ST-Link和J-Link等等根据自己的设备来选择。 最后点击完成。 如上图此时一个工程就创建好了左边是项目资源管理器包含该工程中的所有文件。 RT-Thread Setting双击这个会出现一个图形化界面用来安装各种组件后面会用到。CubeMX Setting双击这个就会打开CubeMX可以配置芯片的外设生成HAL库的代码。drv_clk.c在drivers目录下的drv_clk.c中可以修改时钟源生成的工程默认使用的是内部高速时钟HSI可以修改代码配置成外部时钟源HSE本喵这里就不配置了直接使用内部高速时钟。 如上图所示将工程进行编译然后将程序下载到开发板中。 如上图所示将开发板的uart1和电脑相连并且打开串口助手可以看到内核的打印信息(绿色框)和main线程的打印信息红色框中。 在RT-Thread中任务被叫做线程。main函数仅是其中的一个线程。 main函数在applications目录下可以看到该函数中并没有像FreeRTOS一样的内核初始化和启动调度器等内容仅仅是一个干干净净的main函数。
RT-Thread启动流程 如上图所示RT-Thread的启动流程本喵大概介绍一下 第1个文件startup_stm32f103xe.s 调用SystemInit系统初始化比如初始化时钟调用__main重定位比如把代码段从Flash复制到内存然后执行$Sub$$main 第2个文件src\components.c 执行一系列的初始化调用rt_application_init 初始化RTT组件(包括创建SHELL线程)因为有SHELL线程所以即使main函数为空也是可以操作开发板的调用main函数可以写为空函数 启动调度器rt_system_scheduler_start
位置①处创建了SHELL线程用户可以在串口上输入各种命令所以位置②的main函数写为空函数也是可以的。
添加DHT11软件包 如上图所示增加DHT11的软件包
双击项目资源管理器中的RT-Thread Setting弹出一个图形界面窗口。点击添加软件包弹出软件包选择界面。搜索DHT11出现多个软件包。找到下载次数最多的(绿色框)然后点击相应软件包的添加。 如上图此时软件包这里就会有一个dht11的图标然后按下快捷键Ctrl s保存就会自动下载软件包并且构建到工程中。 如上图所示此时在packages目录下就有一个dht11-latest的目录里面包含几个.c和.h文件。其中dht11_sample.c是一个样例。
打开dht11_sample.c后将#include drv_gpio.h修改成#include drv_common.h这是由于版本原因新版本和gpio相关的定义都放在了drv_common.h中。
还要修改读取DHT11温湿度数据的引脚生成工程后默认使用的是PB12查看原理图使用自己对应的引脚本喵这里是PF6。 如上图在编译的时候会报错找不到sensor.h头文件所以需要将头文件的路径告诉编译器。 如上图sensor.h头文件位于sensors文件夹中。点击最上边的c/c项目找到该文件然后右键点击在弹出的界面中进行添加构建。 添加构建就是在编译的时候要编译这部分文件否则不会编译这里的文件。 如上图所示点击标号1的设置然后选择标号2的路径和符合最后添加sensor.h头文件所在路径。 //${ProjName}表示的是工程文件名字后面的是路径。 如上图所示将程序重新编译好下载到板子中以后在串口助手上就可以看到输出的温湿度数据了。 如上图所示在我们安装软件包中的dht11_sample.c中专门有一个线程read_temp_entry读取温湿度数据的线程不断调用rt_device_read来读取DHT11温湿度传感器的数据并且打印出来。 rt_device_read是一个标准接口就像写C语言代码中的open函数一样。DHT11的驱动框架是怎样的本喵就不在这里讲解了。 此时我们就实现了温湿度的读取可以看到整个过程中也没有写多少代码RT-Thread Studio中的软件包帮我们实现了这部分代码。
添加ESP8266软件包 如上图所示按照1~6的步骤添加一个AT设备这是用来和ESP8266通信的。 第6步中填入WIFI模块要连的WIFI名称和密码。更改AT设备使用的串口为uart3根据原理图来确定。 如上图所示此时就自动有了一个AT DEVICE软件包和一个AT客户端组件(红色框)然后点击绿色框中的libc使能C语言库因为要用到C语言库中的函数。最后按下Ctrl s保存。 如上图所示要在drivers目录下的board.h中定义uart3仿照uart1定义即可根据原理图定义使用的引脚。 如上图将main.c和dht11_sample.c中的打印信息注释掉让它不要干扰串口助手的输出。 如上图所示将程序编译下载到开发板后可以从串口助手看到WIFI连接成功的消息。
在控制台使用ifconfig可以看到获得了IP地址并且可以使用ping命令和www.baidu.com进行网络通信。此时ESP8266就设置成功了。
添加MQTT软件包
MQTT是一种网络通信协议适合于少量数据的传输具体原理本喵就不在这里介绍了。 如上图所示按照步骤1~3添加pahomqtt软件包。 如上图所示在软件包处会有一个Paho MQTT将鼠标移上去以后点击出现的配置项(步骤1)然后在弹出的界面中使能MQTT示例(步骤2)。最后保存配置。 每次保存了新的配置以后sensor.h文件又会找不到这是该软件的一个BUG所以需要重新添加路径和添加构建。 与服务器建立连接
现在工程就配置好了此时我们的开发板就是一个客户端接下来就是需要让开发板和服务器进行连接和通信了。 如上图本喵在阿里云平台配置了一个设备实例打开该设备后点击里面的MQTT连接参数后面的查看(红色框)然后就会弹出参数。 如上图所示在产品中有默认的订阅主题和发布主题我们就直接订阅/user/get这个主题以及发布/user/update这个主题。 如上图所示将自动生成的mqtt_sample.c中的默认MQTT连接参数改成自己服务器的。 如上图所示在mqtt_sart函数中默认生成的代码是随机生成一个客户端ID此时我们有固定的客户端ID将我们前面服务器中的ID赋值过去。 如上图所示将程序编译并下载到开发板中后在串口助手中执行help命令可以看到有几个mqtt打头的指令。 如上图所示在串口助手中执行mqtt_start命令启动MQTT会打印相关成功信息并且此时服务器设备也显示在线状态说明此时开发板这个客户端和服务器MQTT连接成功。 如上图所示在服务器设备中的Topic列表里点击发布消息发布/user/get主题的消息给开发板客户端然后在弹出来的框中填入发布的消息最后点击完成(步骤1~5)。 如上图所示此时在串口助手上就能看到服务器发布的信息了。 如上图所示在串口助手中使用mqtt_publish命令发布消息到服务器。 如上图所示在服务器设备中根据步骤1~4可以查看到开发板客户端刚刚发布的消息。
此时我们的开发板就和服务器成功的建立了连接并且可以进行通信了。
服务器控制外设 如上图代码所示在main.c文件中定义LED以及风扇的引脚并在device_init函数中进行初始化。 如上图代码所示在device_control_callback回调函数中根据服务器发布的消息来控制外设具体控制细节和前面FreeRTOS版本的一样。 msh_exec调用该函数和我们在串口助手上输入命令是一个效果。 如上图所示在main函数中读取温湿度传感器的数据然后再向服务器发布每两秒进行一次。
控制设备的回调函数谁在执行 如上图代码所示控制设备的device_control_callback回调函数在mqtt_sub_callback回调函数执行。 在启动mqtt_start的时候会专门创建一个线程用来接收服务器发布的消息。当服务器发布了消息以后该线程就会读取并且调用mqtt_sub_callback函数。 所以在控制设备的函数中就可以得到服务器发布的消息。 如上图代码所示将原本dht11_sample.c中的dht11_read_temp_sample从段中移除不让该函数执行因为现在是在main.c读取温湿度数据的。 如上图所示将程序编译下载到开发板中后等待和服务器建立连接后可以从服务器的日志信息中查看到开发板发布的温湿度数据。
消息格式含义{“dev”:“lamp1”,“status”:“1”}点亮LED1,后面的status改为0则熄灭它dev有多个取值lamp1,lamp2,lamp3{“dev”:“fan”,“status”:“1”}转动风扇,后面的status改为0则停止它{“dev”:“home”,“status”:“1”}离开了家后面的status改为0则表示回家{“Temperature”:28,“Humidity”:88}上报温度、湿度
开发板和服务器进行通信的消息格式如上表所示在服务器发布控制消息开发板就会做出相应的操作。 如上图所示在服务器上发布一个这样的消息开发板上的所有LED灯都会亮并且风扇也会开始转动最后面本喵会上传效果图。
小程序控制外设
这里本喵使用百问网的小程序和服务器来控制开发板。 如上图所示在mqtt_sample.c文件中定义百问网的三元组不用定义客户端ID所以要将前面注释掉的随机ID修改回来。 在main.c中将发布消息的主题修改为/topic/humiture其他的不用动。 将程序编译完成后下载到开发板中此时开发板客户端就会自动和百问网的服务器相连。 如上图所示在微信小程序中搜索百问网嵌入式物联网选择双架构然后就会出现这样一个页面。
第一步让小程序连接服务器第二部订阅/topic/humiture主题这个主题必须和开发板发布的主题一样。
然后就可以接收到开发板发来的温湿度数据如绿色框中的内容。 如上图点击这几个图形化按钮就会发布相应的/topic/ctrl该主题是开发板订阅的主题。
温湿度图标无法点击它仅显示开发板发布的温湿度数据。 如上图所示点击小程序中的按钮开发板的串口助手就会接收到订阅的控制主题消息并且做出相应的控制。 如上图此时开发板上的灯就亮了。
总结
在整个智能家居实现的过程中本喵自己根本就没有写多少代码尤其是驱动层的代码就没有写过全部用的是RT-Thread的软件包和组件。这就是RT-Thread的强大之处它可以屏蔽底层的细节让我们注重于上层应用的开发。
这种通过服务器来实现智能家居不再像FreeRTOS一样小程序和开发板必须处于同一个局域网中此时开发板和小程序可以处于任意一个局域网中。 开发板和小程序订阅以及发布的消息是通过服务器进行转发的。