1.简介
2.4G网关软件基于TencentOS Tiny,硬件基于 TencentOS Tiny CH32V_EVB RISC-V开发套件。可以实现子设备与网关,网关与服务器间数据及指令交互,实物如下图:
展示视频
2.硬件部分
2.1 2.4G RF
2.4G RF使用的是si24r1模块,通过SPI接口与MCU连接,原理如下。
2.2 WiFi(板载)
开发板板载了一个esp8266 WiFi模块,通过串口AT命令进行控制,电路如下图所示:
2.3 显示(板载)
TFT LCD液晶显示模块用来向用户显示系统状态、参数或者要输入系统的功能。为了展示良好的视觉效果,开发板使用ST7789V 控制器驱动的TFT LCD显示屏,分辨率为240*240。该款LCD使用SPI接口,由于SPI接口空闲时引脚要上拉,因此下面的原理图中接了10k电阻上拉,然后才接入MCU引脚
3.云平台
此步骤在腾讯云IoT explorer 上完成项目、产品、设备创建、参数配置,为设备的接入做准备。首先需要建立一个项目,如“开发者成长激励计划”,在此项目下我们进行各种设备的开发。
3.1 网关
3.1.1 建立产品
这一步按照提示执行即可,注意第三步设备类型选择网关。
点击新建立的产品名称,进入以下页面,开始具体的设置产品的各种属性
3.1.2 建立物模型
这一步点击“新建自定义功能”添加网关的一些参数,如温度、电压等。以温度为例子,参数的属性x信息如下
3.1.3 设备开发
这部分没有改动,直接下一步。
3.1.4 交互开发
交互开发部分这里至涉及到配置小程序,有6个内容,如下:
例子:编辑面板
3.1.5设备调试
首先我们先新建一个设备,此设备对应这我们手中一个实际的物理设备。这里获取到关键的 设备名称 产品ID 设备秘钥,这三个参数是与服务器建立连接的关键。在此页面可以进行调试。
3.2 子设备
3.3 网关添加子设备
在创建产品页面,对网关设备进行子产品管理,如下:
在调试具体设备时,在子设备管理中执行如下,可将实际的子设备添加到网关中,进行测试
4.嵌入式软件
4.1 软件结构
4.2 2.4G RF收发
此部分主要包括以下部分:
代码语言:txt复制 1. void si24r1_port_init(void);//端口初始化
2. spi_init();//SPI初始化
3. void read_frame(void);//从si24r1模组中读取数据
5. void EXTI15_10_IRQHandler(void);//si24r1模组中断(中断11)
6. void receive_frame_task_entry(void * arg);//接收进程主体
const k_event_flag_t event_receive_frame;//定义了一个事件,用于收到数据后调用接收进程。
4.3 连接网络
此部分直接使用的TencentOS Tiny组件,只需要注意正确填写WiFi名和密码即可。
代码语言:txt复制 1. while (esp8266_tencent_firmware_join_ap("WiFi名", "密码") != 0) {
printf("connect wifi... fail!rn");
LCD_ShowString(30,140 16 16 16,"connect wifi fail",WHITE,BLACK,16,0);
}
4.4 时间显示(RTC)
这部分直接调用的官方的库文件,主要是有一个结构体,只需要用好这个结构体就能满足简单应用:(遗憾的是开发板没有备用电池,断电后计数就会暂停)
代码语言:txt复制 1. typedef struct
{
vu8 hour;
vu8 min;
vu8 sec;
vu16 w_year;
vu8 w_month;
vu8 w_date;
vu8 week;
} _calendar_obj;
4.5 LCD显示
此部分大部分使用的是历程的驱动,并且参考了这篇文章可以混合显示汉字和英文的函数。该部分所使用的关键函数有
代码语言:txt复制 1. void LCD_ShowStringCn(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//混合显示中英文。
2. void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);//在指定区域填充颜色
3. void drawnow_task_enty(void * arg);//建立一个专门的进程,用于刷屏(网络状态,传感器数据,时间等);
实际的运行效果如下图:
4.6 连接服务器(mqtt)
此部分的逻辑没有搞懂,虽然能够上传数据到服务器上,但是不进行具体解释,运行的效果图如下: