开发者成长激励计划-基于TencentOS Tiny 和 CH32V307的2.4G网关

2022-08-10 03:45:09 浏览数 (2)

1.简介

2.4G网关软件基于TencentOS Tiny,硬件基于 TencentOS Tiny CH32V_EVB RISC-V开发套件。可以实现子设备与网关,网关与服务器间数据及指令交互,实物如下图:

图片.png图片.png

展示视频

视频内容

2.硬件部分

2.1 2.4G RF

2.4G RF使用的是si24r1模块,通过SPI接口与MCU连接,原理如下。

图片.png图片.png

2.2 WiFi(板载)

开发板板载了一个esp8266 WiFi模块,通过串口AT命令进行控制,电路如下图所示:

图片.png图片.png

2.3 显示(板载)

TFT LCD液晶显示模块用来向用户显示系统状态、参数或者要输入系统的功能。为了展示良好的视觉效果,开发板使用ST7789V 控制器驱动的TFT LCD显示屏,分辨率为240*240。该款LCD使用SPI接口,由于SPI接口空闲时引脚要上拉,因此下面的原理图中接了10k电阻上拉,然后才接入MCU引脚

图片.png图片.png

3.云平台

此步骤在腾讯云IoT explorer 上完成项目、产品、设备创建、参数配置,为设备的接入做准备。首先需要建立一个项目,如“开发者成长激励计划”,在此项目下我们进行各种设备的开发。

图片.png图片.png

3.1 网关

3.1.1 建立产品

这一步按照提示执行即可,注意第三步设备类型选择网关。

图片.png图片.png

点击新建立的产品名称,进入以下页面,开始具体的设置产品的各种属性

3.1.2 建立物模型

这一步点击“新建自定义功能”添加网关的一些参数,如温度、电压等。以温度为例子,参数的属性x信息如下

图片.png图片.png

3.1.3 设备开发

这部分没有改动,直接下一步。

3.1.4 交互开发

交互开发部分这里至涉及到配置小程序,有6个内容,如下:

图片.png图片.png

例子:编辑面板

图片.png图片.png

3.1.5设备调试

首先我们先新建一个设备,此设备对应这我们手中一个实际的物理设备。这里获取到关键的 设备名称 产品ID 设备秘钥,这三个参数是与服务器建立连接的关键。在此页面可以进行调试。

图片.png图片.png

3.2 子设备

3.3 网关添加子设备

在创建产品页面,对网关设备进行子产品管理,如下:

图片.png图片.png

在调试具体设备时,在子设备管理中执行如下,可将实际的子设备添加到网关中,进行测试

图片.png图片.png

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);//建立一个专门的进程,用于刷屏(网络状态,传感器数据,时间等);

实际的运行效果如下图:

图片.png图片.png

4.6 连接服务器(mqtt)

此部分的逻辑没有搞懂,虽然能够上传数据到服务器上,但是不进行具体解释,运行的效果图如下:

图片.png图片.png
图片.png图片.png

5未完成部分

5.1 未实现以太网连接网络的功能

图片.png图片.png

5.2 未测试设备的睡眠低功耗特性

5.3 在下位机和服务器连接的部分,还存在以下问题,导致该部分功能未完全实现。

5.3.1 还没有搞清楚网关和子设备如何通过“mqtt”与服务器相连

5.3.2 还没有理清网关如何自动添加子设备,以及保存子设备信息

0 人点赞