本科时学校组织了为期两周的实训,当时因为疫情原因只能线上,学习的是stm32,本来利用32制作智能家居并上传阿里云网上的教程很多的,但是仿真并上云暂未发现,这也是我本次实训感觉学到的东西。

实现的东西其实很简单,就是温湿度,光照传感器,然后测得的数据在LCD屏显示并实时上传至阿里云。 接下来我将简要介绍一下本次实验的操作流程,一些个人认为没必要再解释的操作就不写了,就当做一次学习记录。 另外,本次使用的仿真软件版本为proteus8.9,使用其他版本可能出现未知的问题。这里附上仿真软件下载链接

一、proteus电路图

利用Proteus仿真基于stm32的智能家居并上传至阿里云_嵌入式开发

二、仿真效果图

利用Proteus仿真基于stm32的智能家居并上传至阿里云_STM32_02

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_03

三、LCD显示文字与图标

仿真用到是ILI9341——LCD,分辨率为240x320,采用SPI接口协议,颜色格式为RGB256—16位真彩色,我们利用封装好的函数来在LCD显示文字与图标。这里要要用到两个取模软件,分别是汉字取模与图片取模。 首先需要将要显示的文字取模,取模得到的结果存放在工程里的font.h文件里。

1.汉字取模 打开文字取模软件并设置选项

利用Proteus仿真基于stm32的智能家居并上传至阿里云_阿里云_04

复制取模的16进制代码,放在font.h文件里的const typFNT_GB16 tfont16[]里,和前面的格式保持一致,这里要注意const typFNT_GB16 tfont16[]里的文字取模只能出现一次,不能重复取模

利用Proteus仿真基于stm32的智能家居并上传至阿里云_嵌入式开发_05

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_06

然后使用函数

x:在LCD屏上的x坐标
y:在LCD屏上的y坐标
fc:字体颜色
bc:背景颜色
str:提前在font.h里已经取模了的你想输出的文字
size:字高、字宽,取模是取得是16X16,这里就填16
mode:0-no overlying,1-overlying,0或1没有太大差别

Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str, u8 size, u8 mode)

2.图片取模 因为本次仿真使用的是stm32f103r6,其闪存只有32k,所以在对图片取模时就要求图片的分辨率不能太高。 首先选择一张图片,用电脑的画图打开,然后更改图片的分辨率为50x70,如果图片为非jpg格式需要另存为jpg格式。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_07

打开图片取模软件,打开准备好的图片,并设置好参数,保存为.c文件。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_阿里云_08

如图,生成了一个数组,数组长度为7000,因为芯片的闪存较小,这里我多次验证最大应该不能超过7200。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_09

将生成的.c文件加入到我们的过程中,在main.c里需要外部声明才能调用。

extern const unsigned char gImage_girl[7000];

利用函数

参数:x0 开始位置,y0开始位置  ,high高度,width 宽度 ,bmp 图片数据数组
Paint_Bmp(int x0, int y0, int width, int high, const unsigned char bmp[])

输出图片。

四、仿真连接阿里云配置

在我们的仿真图里,我们并没有用到实际的4g/5g模块或者WIFI模块,在仿真图里也不容易添加,所以我们添加了仿真串口COMPIM,其连接的是stm32的串口二,进行我们数据的转发。模拟上云的原理是,当我们的温湿度还有光照传感器得到数据后一方面会发送到虚拟串口显示,一方面我们也可以利用通讯转发软件将数据通过串口2发送到通讯转发软件,再由通讯转发软件发送到阿里云,利用我们电脑的网络来实现与阿里云的连接。这其中通过串口2发送数据到通讯转发软件需要用到虚拟COM口,我用的是VPSD,添加虚拟COM1和COM2,Proteus中的仿真串口使用COM1,则通讯转发软件用到COM2。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_STM32_10

利用Proteus仿真基于stm32的智能家居并上传至阿里云_嵌入式开发_11

串口的波特率等要设置一致。 登录阿里云,在物联网平台新建自己的产品与设备

利用Proteus仿真基于stm32的智能家居并上传至阿里云_阿里云_12

在创建的产品中添加设备,完成后查看产品的三元组(ProductKeyDeviceNameDeviceSecret),然后新建文本文档将三元组暂时保存

利用Proteus仿真基于stm32的智能家居并上传至阿里云_阿里云_13

再查看设备的MQTT参数并将mqttHostUrlport保存到上面新建的文本,之后穿串口的转发需要用到

利用Proteus仿真基于stm32的智能家居并上传至阿里云_STM32_14

新建物模型 在产品中,点击“功能定义”,“编辑草稿”,“添加自定义功能”,添加“温度”,这里要注意标识符,物模型的标识符一定要和代码里写的标识符保持一致,否则数据无法发送到云端。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_STM32_15

步长个人理解表示数据变化时是每次零点几的变化还是每次整数整数的变化,或者说是一个反应数据准确程度的吧。新建物模型后选择发布上线。 之后可以看到产品的Topic列表里的物模型通信Topic里有了属性上报Topic,这两个订阅和发布Topic在实际上云中会用到,但本次的仿真上云不需要。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_16

至此阿里云的配置结束。 打开通讯转发软件,设置IP为我们之前保存的mqttHostUrl,端口为port,于是在收到串口2的数据以后便会转发到目的IP地,也会是我们阿里云的产品。

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_17

利用已经封装好的阿里云连接文件,在Ali.h添加自己的三元组

利用Proteus仿真基于stm32的智能家居并上传至阿里云_单片机_18

五、模拟上云

运行Proteus,并提前打开通讯转发软件的COM2,当仿真的虚拟串口输出“start connecting”,通讯转发软件连接IP。

当收到由网络发来的数据时,表示一次数据传输到云成功

利用Proteus仿真基于stm32的智能家居并上传至阿里云_嵌入式开发_19

连接IP的时机可能对于连接的成功有影响,因为是仿真连接时并不稳定,可能会自己突然中断,多尝试连接几次即可。

END本人水平有限,以上叙述可能会有出错还望大佬赐教!!

相关的代码和软件都放在这里了https://gitee.com/hree-2002/smart_home