STM32F103C8T6 单片机 ESP8266 12F接入机智云

0 材料

STM32F103C8T6最小系统板子
安心可ESP8266-12F
STLINK程序下载器
USB转TTL模块(串口1看log信息)(下载8266固件)
软件方面:
在这里插入图片描述

1 安心可12F实物图

是邮票,还挺好看。
在这里插入图片描述

2 实现电路图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 制作PCB:

用单片机STM32F103C8T6,配合ESP12F,外部加了些温湿度、继电器、显示屏、蜂鸣器、MQ气体检测、按键,可以不焊接。
在这里插入图片描述

实物,我就焊接了电源、8266和MCU排母排针,想着后续上报温湿度、气体浓度啥的,MCU端也有相应显示,还有按键控制。但是做完机智云发现机智云有点简单,估摸着等有空了弄个socket通信自己玩比较爽。
在这里插入图片描述

4 下载烧写工具:

官网
https://www.espressif.com/zh-hans/support/download/other-tools

在这里插入图片描述

5 下载机智云的固件:

自己开发8266就叫SOC解决方案,需要向机智云申请源码,机智云管它自己的这个协议叫agent。
我用现成的固件(开发8266估计得花不少时间学习)+MCU。固件是机智云提供的。下图处:
https://download.gizwits.com/zh-cn/p/92/94
在这里插入图片描述
下载下来后:
要combine的,这样不用自己设置地址。
如果自己开发ESP8266片内程序,就需要申请机智云agent源码,再它源码上开发自己的程序,然后整出几个bin文件,然后填写片内地址下载。我这里用现成的,机智云已经把几个bin整合成了这个combine文件。
在这里插入图片描述

6 固件烧写过程

把GPIO接到GND
在这里插入图片描述
打开软件,选combine文件。
这里我是DOUT下载成功了,别的ESP可能要选别的SPI MODE,只要能下载进去,管它选啥模式,多试几个。
选32Mbit-C1,这个可能是内部地址划分啥的,不管它,跟着官方选。
取下我做的板子的MCU,单独给8266供电。
USB转ttl接GND RX TX接到8266。
然后点START,然后按一下8266的复位按键(上文中的原理图里的SW1),固件就慢悠悠下载进去了。
下图就是完成后图。
在这里插入图片描述

7 下载MCU源码

瞎点点,搞个产品,搞几个数据线,弄成下面这样。
在这里插入图片描述
弄个源码下来,源码含有机智云协议的。
在这里插入图片描述
进入while1之前加句话使得配置8266进去Air-link连接模式:

gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link????

在这里插入图片描述
然后MCU源码下载进单片机,让ESP8266进入正常工作模式。
这个时候整个板子就工作起来了,ESP8266也进入了Air-link连接模式,正在等待配置。
在这里插入图片描述

接着手机下载机智云软件,手机连接家里wifi,注意不能是5G网络,登陆后添加设备,一键配置,填wifi密码,搜索设备,连接即可。
8266连接上wifi后,就不需要Air-link连接模式了,删除那句话后重新下载一次程序。

8 手机、服务器、硬件 互通互连的查看

手机端进入设备后可以修改数值。
在这里插入图片描述
机智云开发端也有连接。
在这里插入图片描述
也可以打开实时调试,去看设备更改信息。
在这里插入图片描述
硬件单片机程序也是可以获取到实时的数据、也可传输数据到机智云。当手机端改变数据的时候,串口0打印出信息。更细节的东西需要开发MCU程序了。
在这里插入图片描述

9 MCU程序的开发

做完上面的过程,基本是了解了机智云了。
机智云维护服务器数据点,APP和MCU都可以获取数据点信息,也可以上报数据点信息。服务器无漂亮显示界面,想要这样估计还得自己开发web去申请服务器数据点信息。机智云协议双向通信、轻松配置入网、绑定升级固件。主要是机智云的agent固件,他开发的协议支持得多,有人维护,自己去开发全栈的话,要想做得完备,得考虑8266固件、整个通信协议、WIFI连接、WIFI掉线重连、数据心跳时间等等问题,很麻烦。
话说回来,用python开发web集成MQTT协议、8266使用MQTT固件、MCU程序也用MQTT协议,估计也是不错的开发条件,这样自己做web比较美观、APP也比较好看,但时间投入是巨大的。不考虑协议啊安全啊啥的,简单做个socket通信岂不是美滋滋。
有了上面那些后,下一步,了解MCU开发,上传数据,看看APP变化不;APP改变数据,看看MCU怎么接受。

文件的一些定义:
在这里插入图片描述
在这里插入图片描述

上报数据函数。
时间更新函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总体上来说,在userInit中添加数据点开机初始数值。
在这里插入图片描述
在userHandle中给数据点赋值,数据点信息会通过gizwitsHandle((dataPoint_t *)&currentDataPoint);传入服务器。userHandle如果是实时更新数据,周期要大于6S。

在这里插入图片描述
在int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len)中书写事件处理。
在这里插入图片描述

10 使用MCU的资源

使用了串口1PA9 PA10 115200波特 打印log
使用了串口2PA2 PA3 9600波特和8266通信
使用了定时器2心跳走时和按键检测处理。走时是维护变量static uint32_t timerMsCount;
在这里插入图片描述
外部使用下面函数获取走时。

uint32_t gizGetTimerCount(void)
{
    return timerMsCount;
}

觉得不是很好玩,比较单一。

11 下一步

还是使用官网的AT固件,MCU使用socket长连接和python服务器通信。看起来会比较好看,虽然安全性和实用性得不到保证。
希望做的板子能用起来,不然就只有吃灰了。

猜你喜欢

转载自blog.csdn.net/x1131230123/article/details/107458330