Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread活动
物联网
瑞萨_RA6M4
基于RT-Thread+RA6M4的智能家居网关
发布于 2022-07-27 09:16:56 浏览:1568
订阅该版
[tocm] # 基于RT-Thread+RA6M4的智能家居网关 ## 应用背景 说到智能家居,很多人可能接触过小米的智能家居产品。小米的很多智能家居设备都是通过蓝牙、wifi的形式接入网络,蓝牙在4.0版本之后就诞生了低功耗蓝牙(BLE),它的一个很重要的优势在于很容易与手机互联,因为蓝牙已成为手机集成的标准。但蓝牙的传输距离一般在10m以内,若想要在远程管理蓝牙设备,则一般要将蓝牙设备接入蓝牙网关。wifi也有低功耗wifi的版本,低功耗wifi可以借助已有的路由设施直接联网,从而减少了网关的成本。除了蓝牙和wifi,常见还有zigbee、6LoWPAN等低功耗短距离无线传感网络,zigbee和6LoWPAN都支持Mesh组网(蓝牙现在也支持Mesh组网),并且都是基于802.15.4标准,可以说是为物联网贴身打造的。zigbee提供了很多应用层的规范标准,致力于打造通用的zigbee网络,打通不同厂商设备的隔阂。6LoWPAN一个很重要的优势在于其接入网所需要的网关只需要很小的成本就可以实现。 总之,目前多种低功耗短距离无线传感网络共存,一起竞争、发展,百花齐放,谁优谁劣很难说得清楚。 另一方面,M2M通信由本来的基于移动网络逐渐与物联网的需求靠近,基于低功耗广域网(LPWAN)的M2M通信应运而生。典型的低功耗广域网技术包括NBIot、Lora等。可以实现低成本、低功耗、远距离、大量连接的物联网应用。 虽然前面讲述了多种网络,其实本项目只涉及到其中地低功耗wifi和Lora。事实上,Lora本身只定义了物理层协议,基于该物理层协议,Lora联盟又提出了LoraWAN通信协议。商业的主流趋势都是建立LoraWAN网络,多个Lora节点接入LoraWAN网关,LoraWAN网关通过wifi或网线再接入网络服务器。Lora的通信距离可以达到3km以上,所以Lora网络支持组建较大规模的网络。 本项目不会用到LoraWAN协议,LoraWAN网关有点小贵,项目只利用了Lora的物理层特性,并基于自定义的私人协议简单地组一个小型Lora星型网络(1个lora网关和多个lora节点),最终通过低功耗wifi模块esp8266接入路由,从而连上网络。 使用lora作为智能家居的低功耗网络有一些优点:一、传输距离远,即使隔墙的情况下也能够无压力传输,相比于zigbee来说,无需“路由角色”作为数据传输中介;二、对于自家的水电表设备,可使用lora无线网络通信获取数据(目前水电表的主流是嵌入NBIot,NBiot是基于现有的LTE网络,对信号有要求),用lora获取水电表数据可脱离公共设施的依赖,实现完全的私人网络;三、当工作地点离家庭较近时(2km以内),也可实现私人网络获取家庭环境的传感数据。 ## 功能介绍 项目使用瑞萨的RA6M4微控制器,并基于国产的RT-Thread系统实现一个简易的智能家居网关。该简易网关负责接受范围内多个lora节点的传感器数据,并将接收到的数据上传到阿里云物联网平台,也可通过网关发送命令控制节点执行动作。用户通过手机APP访问到已经上传到阿里云的数据,也可通过APP发送控制数据包给阿里云,最终传输到lora网络进行相关控制。网关会给加入网络的每个节点分配地址,并将已加入的网络节点保存。通过唯一的节点地址可以实现lora网络的具体某一节点控制。因此,通过该网关,可以自定义更多的命令,实现更复杂的应用。 ## 系统框架 整个项目实现的系统框架如下:  其中lora节点是由“MCU+lora模块”组成的,并按照自定义的协议与lora网关通信。 ## RT-Thread使用情况概述 1. 使用I/O设备模型。lora模块的驱动是基于RT-Thread的I/O设备模型实现的,将lora模块的驱动与lora网络应用协议层分开,详见“lora_as32.c”文件; 2. 使用多线程。该项目在应用层开了一个线程用于读取lora模块驱动数据,并判断读取的数据进行相关处理;同时主线程在初始化过程会连接阿里云物联网平台,并订阅相关信息;另外,lora驱动层实际上也开了一个线程用于实时接收lora模块数据; 3. 使用信号量。对于lora模块驱动的实现,lora模块在进行命令操作的过程与数据发送的过程是不能被打断的,为了防止多线程操作导致lora执行过程被打断,采用信号量同步操作; 4. 使用消息队列。对于lora模块驱动的实现,其模块对应的rt_device_read并不是直接读模块数据。实际上,lora驱动会开一个接收线程用于接收lora网络数据,在该线程会按照一定的协议接收lora网络数据,并将数据封装到消息队列中,rt_device_read实际上读的是消息队列中的数据; 5. 使用事件。对于lora模块驱动的实现,lora模块除了需要收发模块之外,在使用过程中也可能设置一些参数,这就需要通过判断lora模块的应答来确定是否设置成功,利用rtthread的事件机制很适合用于发送不同线程间的应答信息。 6. 使用软件定时器。lora网络需要通过心跳机制来确定lora节点是否断开,心跳机制的实现依赖于软件定时器; 7. 使用rtthread内核链表。lora网关需要动态添加lora节点地址,这就需要使用到链表; 8. 使用互斥锁。lora网关维护的节点链表可能出现并发操作(定时器处理和线程都会操作到链表),因此通过互斥锁控制; 9. 使用rtthread标准的外设接口。包括GPIO、UART。 ## 硬件框架 项目直接使用“试用板+模块”的形式,试用板与模块之间通过杜邦线连接。项目中使用的低功耗wifi模块和lora模块都是使用串口进行通信的,因此硬件框架十分简单。具体如下:  ## 软件框架说明 简易网关的软件处理主要分为2个部分,一是lora网络层的处理;二是lora驱动层的处理。 lora网络层是基于lora驱动层之上的一个纯软件逻辑,相对比较容易实现,其流程如下:  lora驱动层需要对数据进行筛选,符合自定义协议要求的才能继续执行,将串行的数据转换成消息队列,最终在提供给应用层的read接口中读取消息队列中的消息;同时,write接口也实现了底层协议的屏蔽,应用层直接调用write即可实现lora数据的互通。lora驱动层读取模块的逻辑如下:  lora网关需要与多个节点通信,在通信之前需要建立连接,从而达到管理多个节点的目的。建立连接的过程如下:  ## 软件模块说明 1. esp8266 低功耗wifi模块,使用AT指令控制,在项目中,通过发送AT指令给esp8266模块,实现socket通信,rtthread提供了at-socket层的代码,可以轻松对接系统中标准的socket接口。基于标准的socket接口,又可利用rtthread已适配完成的很多资源,比如项目中就直接使用了接入阿里云物联网包。 2. lora as32 as32是对SX1278进一步封装的模块,使得开发者可以用串口命令实现lora通信。该模块除了通信使用的TX和RX之外,还需要通过MD0、MD1、AUX引脚来控制。对该模块的软件处理需要结合具体的硬件特性。lora实际上是支持扩频的,但在本项目没有运用这个特性来实现更可靠的组网。 ## 作品完整图片  ## 视频地址 https://www.bilibili.com/video/BV1xN4y177vB/?vd_source=ff8e91c9e47649305e48e03282af4780 在目前的android应用中,只是简单地实现传感数据的获取。实际上,通过该网关,可以实现更复杂的应用(例如,查看网络拓扑,可清晰知道网络中的每个节点以及节点类型,并且,由于lora网络中地址是唯一的,所以通过地址,可以唯一指定lora节点,从而控制指定的lora节点)。由于活动时间关系,应用以最简单的一个方式呈现。 如若需要了解节点程序,可访问以下链接: [自定义协议的智能家居节点实现](https://club.rt-thread.org/ask/article/fb976150395c264f.html "自定义协议的智能家居节点实现") ## 代码地址 git地址下载: [https://gitee.com/bigbear2021/rt_thread_ra6m4](https://gitee.com/bigbear2021/rt_thread_ra6m4) 代码中包含了第三方库,包括cJSON、AT ESP8266设备,由于对于它们的使用无修改,推送到仓库中的第三方库只是引用了commit id。因此在clone仓库源码时,不会有cJSON和AT ESP8266的源码,目前都是需要另外再下载其源码,个人猜测应该有某个git命令可以帮助补全源码,若有懂的人可以帮忙在评论中告知。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
大目熊
业余开发者
文章
3
回答
13
被采纳
3
关注TA
发私信
相关文章
1
(苏州站)RT-Thread物联网开发者沙龙【已结束】
2
(成都站)RT-Thread物联网开发者沙龙
3
(深圳站)RT-Thread物联网开发者沙龙
4
(西安站)RT-Thread物联网开发者沙龙
5
成都站2018 RT-Thread开发者沙龙回顾及PPT下载
6
2018 RT-Thread物联网开发者沙龙(北京站)
7
2018 RT-Thread物联网开发者沙龙(南京站)
8
第十三届研电赛RT-Thread企业专项奖发布通知
9
RT-Thread应用作品征集大赛开始啦!
10
你的投票将决定RT-Thread官网应该优先准备的文档是哪些
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
8
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部