STM32项目复刻制作流程讲解、常见问题解决【合集】【实时更新】

注意!!!【如果第一次了解项目的同学,请认真看完第一章,第二章、第三章,文章有目录!!】
注意!!!【如果第一次了解项目的同学,请认真看完第一章,第二章、第三章,文章有目录!!】
注意!!!【如果第一次了解项目的同学,请认真看完第一章,第二章、第三章,文章有目录!!】

项目设计里用到的全部工具软件,Qt安装包、keil安装包,各种调试助手,都可以在这里下载。
https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

本文章内容会实时更新,常见的问题会随时记录在册。

在这里插入图片描述

文章目录

一、 复刻过程的案例视频

[这里的内容很重要]

复刻每一个项目的步骤基本上是一致的、大家按这个步骤来做。

每个项目都有一份PDF格式的设计文档,这个设计文档就在下载的项目资料包里。名字与项目的名称同名,格式是PDF

这份设计文档的内容很多,对于刚接触项目的同学来说,看完看懂是很不容易,想要快速上手做项目,做实物,就要按步骤来,减少时间浪费。

重要声明: 设计文档里不是每个章节的内容都需要大家做。设计文档是记录项目的开发过程,是给大家学习看的,如果是快速做实物就不需要全部看完做完。

下面是一个资料包下载下来后设计的步骤:

【1】在电脑上解压下载的项目资料包。一定要解压 ,一定要解压

【2】找到解压后的文件夹,找到里面同名项目的设计文档,PDF格式文档。打开设计文档,文档有目录,要展开目录看。

【3】翻到文章第二章也就是硬件选型章节,按硬件选型章节的模块进行1:1购买。为了减少复刻问题,不要自己换型号。严格按文章的型号买。如果点击的模块商品链接过期了。大家可以在淘宝其他店铺购买。只要是同型号与文档里商品截图长的一样的模块都是可以的注意:长得一样就可以

【4】硬件购买后,等待快递到来的过程中,可以继续做下面的事情。

(1)在B站看一遍当前正在复刻的项目的视频,认真看完,了解项目实现了什么功能。

​ B站视频的地址在这里:https://space.bilibili.com/68130189 在这里搜索项目名称。

​ (2)如果你的项目是物联网项目,是需要联网,比如:连接OneNet、腾讯云、阿里云、华为云。 那么就按文档第三章的步骤,去完成物联网平台的配置与开发、测试。

【5】硬件到齐之后。先看资料包目录下的原理图,了解模块连线方式 或者 看设计文档的STM32设计章节的第1小节的文字版本接线说明,开始接线。

如果对接线没有概念,那么可以看下面这个视频了解模块的接线过程。

https://www.bilibili.com/video/BV1ZjXvYYEPA

【6】线接好之后,就可以打开工程编译代码、下载程序。

(1)如果你没有安装keil软件看这个视频

https://blog.csdn.net/xiaolong1126626497/article/details/146037629

(2)如果你不会下载程序,看这个视频。

https://www.bilibili.com/video/BV1Cw4m1e7Yc

(3)如果你的项目是物联网项目:连接了腾讯云、华为云、OneNet等等。 那么要修改STM32工程代码里的main.c文件最前面的MQTT三元组、服务器IP地址。4个参数即可。 替换为你自己账号的信息。

大致的基本步骤是如上, 但是做项目虽然很简单。 但是并不会一切顺利。

肯定会遇到意外情况。那么这些意外情况请看下面第四章、第五章的内容。

二、复刻项目的的步骤-图文介绍

2.1 第1步

电脑打开PDF文档,电脑打开PDF文档。 照着PDF格式的设计文档,买回来硬件模块。

每个项目都设计文档: 打开设计文档的目录查看,找到硬件选型章节,买回项目所需要的硬件,每个模块的硬件型号,硬件链接都贴了的。照着点击链接去买就行了,毫无压力。

image-20240322132001847

image-20240322132127263

2.2 第2步

硬件买回来之后,然后按照硬件接线章节的硬件连线说明,将模块与STM32开发板之间连接好线。

每个项目都设计文档: 打开设计文档的目录查看,找到STM32设备端代码设计章节,找到硬件连线说明。

可能需要注意的一些问题:如果你接线之后,发现某些模块无法正常使用。 接线也没错。 比如: RC522刷卡模块、步进电机模块、这些模块。 注意去对比下你下载的STM32工程代码里的接线说明。 每个工程里每个模块都有对应的.h文件,.h文件里有说明当前工程里模块对应的接线。
文档的内容写完就发表,而代码可能会因为后续调试做一些更改,没有更新文档,不过这个只是少部分项目。 大家复刻的时候注意看下工程对应接线就行。 有问题也可以私信问。
image-20240322131548073

下面是接线的过程:

按照设备文档的说明,买回来硬件之后,拆开快递,拿出来的模块,就是下面这样的。

image-20240321094343129

然后照着设计文档的说明使用杜邦线进行接线就行了。

不知道如何接线? 没关系,我下面以DHT11温湿度传感器为例,画图说明。你看懂了这个。其他模块也差不多的。

在这里插入图片描述

在这里插入图片描述

注意: 如果是 OLED显示屏,直接插上去就行了,买的开发板上本身就有排母,照着接,看准开发板板子上的 丝印说明,靠左插入,开发板的排母右边最终会空出一个多余的插孔叫BL,这个OLED显示屏用不到。

image-20240120160855493

如果是LCD显示屏直接插上去就行。

image-20240227232916603

注意: 开发板自带了4个按键,其中第2是个RST 是复位键、另外3个按键是可编程的独立按键。

如果硬件接线里有说板载按键、板载LED灯,就是说的板子本身自带的按键和LED,不用接。

image-20240321093357574

如果想固定板子,可以买个热熔枪+热熔胶棒,将模块固定在板子上。

image-20240321094420385

最终的效果:

image-20240321094518439

2.3 第3步

如果代码用到了WIFI模块、4G模块和NBIOT需要联网的。
那么WIFI需要提前创建热点,等待设备连接。
4G模块和NBIOT模块需要插好SIM卡才可以正常使用。

2.4 第4步

如果你的项目用到了云服务器。也就是物联网平台。那么就需要修改代码,设置连接你自己的设备。

打STM32的keil工程。
在这里插入图片描述

打开之后,先设置keil的编码。
在这里插入图片描述

然后设置编译器。(如果设置不正确,编译报错)
在这里插入图片描述

然后再看下面的图片改代码:
在这里插入图片描述

2.5 第5步

打开工程,代码修改完毕之后,编译代码、然后,使用USB线将开发板的左边的USB口(串口1)与电脑的USB连接,打开程序下载软件下载程序。

具体下载过程看下面图:

image-20240319223247836

打开程序下载软件:

image-20240120160735942

还可以看视频:

STM32单片机程序下载方法讲解

2.4 第5步

下载成功之后,串口调试助手会打印初始化过程。 比如:ESP8266的初始化过程,以及WIFI热点的连接过程。

串口调试助手网上随便找一个就行了,任何串口调试助手都可以的,只是为了看一下打印的信息。

image-20240322132400283

如何提示ESP8266-错误,那么就认真检查WIFI接线。

如果显示WIFI连接失败,请认真检查 第三步。

如果一切正常,就进入了程序主界面。

这时候,打开微信小程序(如果你是微信小程序) 或者 手机APP(如果你是手机APP) ,也能看到设备的最新数据,点击控制按钮,也能控制设备了。

到此,恭喜你,整个项目已经完成开发。

注意: 如果你的项目用到了手机APP 或 Window上位机 ,你可以直接将资料包里的 Android手机的安装包(后缀是.apk)的文件拷贝到手机直接安装使用。 如果是Window上位机直接双击可执行目录下的exe应用程序文件运行。

2.5 【对于使用华为云IOT服务器的项目复刻】

关于带华为云IOT的项目。 复刻就是两种:
【方案1】你不需要自己创建华为云,采用原本代码里已经配置好的华为云服务器。 你直接安装编译好的手机APP使用,或者 打开电脑的APP使用。
【方案2】你自己创建了华为云服务器,你要替换你的华为云服务器。那么就需要改STM32代码里main.c最前面的MQTT参数,然后改Qt上位机代码里widget.h里的服务器参数。 然后重新编译生成APP,就可以了。 QT代码编译支持编译Windows 的APP 和 Android的APP,Windows的编译教程在设计文档里已经展示了。 Android的编译需要配置Android环境,这个需要翻墙才好配置,需要网络能够访问谷歌。这个配置过程可以自己搜搜教程解决。只要配置好了Android环境,能够建立Android 工程,打开代码就可以编译出Android的APP 了。

对应的视频:
【1】介绍STM32物联网项目工程移植需要修改的地方 https://www.bilibili.com/video/BV17t42177WL
【2】Qt上位机源码如何打开?编译?运行? https://www.bilibili.com/video/BV1Cz42117Hh

那如何选择呢? 这个看你自己的能力。
选择【方案1】就不用改代码,下载代码就可以使用。
选择【方案2】就需要改代码,匹配你的华为云服务器。
不管你选择【方案1】还是【方案2】对你看STM32代码,看Qt代码,对代码学习,了解代码如何设计的都没有影响。

很多同学担心华为云IOT服务器的费用,这个不用担心: 遥遥领先的物联网服务器是免费使用的。可以免费创建1000个设备。

image-20240322132800075

2.6 keil软件安装

keil软件的下载,看文章最前面的网盘里下载。
【keil5软件安装过程(演示STM32新建工程测试)】
https://www.bilibili.com/video/BV1UY2zY2Ews

keil5软件安装过程(演示STM32新建工程测试)

三、关于供电问题(看完每个小节)

【1】电源模块与STM32如何接?

先看这个博客:
https://blog.csdn.net/xiaolong1126626497/article/details/146071578

如果项目编号是大于 172之后的新项目,部分项目用到了稳压电源模块或者是电池模块。

你在使用电源的时候,接线就要非常的注意,很多同学不认真看视频都忽略了。

这里单独说明说一下。 STM32开发板的右下角5V和GND 要与电源模块的5V和GND连接。
电源模块上面一排是VCC正极、下面一排是GND负极。不要接错了。
在这里插入图片描述

【2】开发板的电源不够接?如何扩展?

当你的模块都买回来时,接线发现,板子的电源口太少了,模块很多,电源不够接,怎么解决?

先看这个博客:
https://blog.csdn.net/xiaolong1126626497/article/details/146071578

有两种办法:
第一种: 需要焊接排针。 淘宝购买两排单排排针。 然后在PCB洞洞板上焊接两排排针扩展电源。
看下面的图片: 两排排针底部 是联通的。 焊接好之后,分别用两根杜邦线,将排针分别插在开发板的5V和GND电源口上,这样就可以将板子的5V和GND扩展出多个,你的模块就可以正常接了。
在这里插入图片描述
在这里插入图片描述

如果你不会焊接怎么办? 但是又想焊接,你可以去外面 修手机修电脑的店铺,让他们帮忙给你焊接一下排针即可。

第二种办法: 直接淘宝买电源扩展板。
链接:
https://item.taobao.com/item.htm?id=824064501327&pisk=fEFjn0YWOnxjbDWVdFQrdBU9b9h1Cl1F1FgT-Pd2WjhA1VEUVAdNnjks1unzgmzqM1gTYuMTbcz2o8qUJIPVnfRsifcOYM5FTE4msfI4zsVvm03sR1utXmQXpe7fYM5FTtL-1isU0CGLT03i2q3tDAQWwV3j6V3x6ai-52v9DlETyagskddtWx3Jw20j6hHtXzp–2itkmH92agi2chWRTgRh0zfrrhv3gSV8PiW6BTnlxp35dRkZrgxh5hKVYkzNqMjvY7FJFFY4PF4iYXJFf4zdlwTvgJqDJgQVvyfAIZQmVUsWo1HR0Fb57M0UeRLPAibeSHWWCUzy-HLCosXnme4Vv0-eF1nzko8oSe5S3UYYmGxyY5dRzHTUSD3ggdj9J4qgREd4KoYdVIzZBoBA1v6PvAsPD75Pdvgel6pmGJur-Hxr4YFPa9eIx3oPD75PdviH40laa_WLdf…&skuId=5538517420771&spm=pc_detail.29232929%2Fevo365560b447259.guessitem.d0

买2个扩展板,方便分别扩展5v电源 和 3.3V电源。 将开发板的5V和3.3V电源分别用杜邦线接入到下面的扩展板最前面横着的一排的VCC和GND上。其他模块就可以将电源接在此扩展板上竖着的VCC和GND上了,解决电源不够接的问题。
在这里插入图片描述

很多设计里用到的MQ2、MQ4、MQ3、MQ7、MQ135、MQxxx 系列的模块,还用到了电机、风扇、充氧泵等一系列电机,还用到了SIM800C这种2G模块、Air724UG等这种4G模块,ESP8266这种WIFI模块。 如果板子只是一根USB线供电,可能会导致系统供电不足。

出现的现象就是:
(1)板子插电脑上,发现串口被占用,串口无法使用。
(2)ESP8266硬件初始化错误,或者WIFI初始化之后却连接不上网络,SIM800C初始化不成功,4G模块无法联网等等问题。

那如何解决供电不足的问题?

【3】外接稳压电源模块

(1)如果你的设计可以用有线电源供电,就买下面推荐的稳压模块。

那么需要采用外部电源供电,买一个下面的 可调电源稳压模块 ,一个12V 、2A的电源插头就可以了。 买回来之后,将模块的电源都接在这个电源稳压模块上,将STM32开发板上的5V和GND分别用杜邦线接到稳压模块的5V和GND上即可。

采用外部电源供电,接好线之后的效果如下:
在这里插入图片描述

在这里插入图片描述

【4】外接稳压模块。调整电压的办法。

电源模块的可调电压输出功能演示(调整输出的电压)

稳压模块购买

链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail

image-20230919222637274

img

电源插头购买

链接:https://item.taobao.com/item.htm?id=616513772095&price=12.5-28&sourceType=item&sourceType=item&suid=28568653-f37a-44d9-ba7f-79370acc2a9e&ut_sk=1.Y%2BSje8BXEHwDAAzffoCNOQAM_21646297_1700218130362.TaoPassword-WeiXin.ShareGlobalNavigation_1&un=6f62cf65130082c7143b731291a8a715&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid2&sp_tk=cTJPQVczdDRwNFI%3D&cpp=1&shareurl=true&short_name=h.5kwQOCl&bxsign=scd4p22mFtBbwnGM_SWdgwgZ27RN8IEynH4PqvQihq_j_z9InPF1g10n1NbTKmLx8KZRz6HVuBpo_O9axHjCBbsVlVvTKl9u7l4CGsrBWq6-xf26Zvx5y-ND4YT_gNAlrvG&tk=q2OAW3t4p4R&app=chrome

在这里插入图片描述

【4】锂电池供电模块

如果你的设计不方便有线电源供电,可以买锂电池模块。

链接:https://item.taobao.com/item.htm?abbucket=2&id=706877076539&ns=1&spm=a21n57.1.0.0.4d02523cSO8v4Z&skuId=5134357660788
在这里插入图片描述

【电池】电源模块的连接说明

四、复刻过程中可能会出现的各种问题疑问

在复刻的时候,很多同学都会问,我用C8T6可以吗?我用ZET6可以吗?

首先,你要了解STM32F103这个系列。
在这里插入图片描述

STM32F103是一个系列。 RCT6 C8T6 ZET6 RBT6 这些都是里面表示不同配置的芯片。 就像你买手机,你买iPhone15 有128G配置,有256G配置,有512G配置,有1TB配置 。
这就是 STM32F103后面的 RCT6 C8T6 ZET6 RBT6 区别。
不是说 ZET6 和 RCT6 是不同的芯片。 他们是一样的。

区别就在于:不同的型号它的引脚数量不一样、flash、sram大小不一样。
如果工程是RCT6的,你想用C8T6?那你要确定目前项目里使用的STM32的GPIO口在C8T6里有没有,如果有就可以。

在这里插入图片描述

STM32F103C8T6最小系统板的IO口。
PB11 PB10 PB1 PB0 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PC15 PC14 PC13 
PB12 PB13 PB14 PB15 PA8 PA9 PA10 PA11 PA12 PA15 PB3 PB4 PB5 PB6 PB7 PB8 PB9



PA13(SWDIO)PA14(SWCLK): 用作STLNK-V2下载器的-SW模式的下载口。

(1)LCD显示屏为什么不亮?下载代码之后屏幕不显示怎么办? ESP8266-WIFI显示硬件初始化错误或者连接不上热点怎么办? 屏幕上一直显示 WIFI Connect怎么办??

这些问题都是指向一个问题: 你的ESP8266 连不上你的热点。

首先,我得说明一下: 只要你现在做的项目是物联网项目,只要里面使用到了WIFI或者2G、4G模块,支持这种需要联网上传数据的功能。 那么,在初始化阶段,模块一定要初始化成功,单片机才会运行接下来的程序。

就比如,上面提到这些问题,为什么屏幕不显示?卡住?数据不动? 其实不是卡住,是现在ESP8266-WiFi正在连接你的WIFI热点。 (这个问题在每个视频里(我发布在B站的视频),也就是项目对应的视频里,都有讲解这个上电WIFI连接的过程,很多同学其实不爱看视频讲解,也不爱看文档,看了就是简单瞟一眼就完了,结果做的时候遇到一堆问题,其实只要认真看文档+视频,90%的问题都已经可以解决了)

那么怎么解决上面说的问题?
(1) 如果是ESP8266-WIFI,就打开工程里main.c文件,翻到最前面有几个宏定义,设置ESP8266连接的WIFI名称和热点; 上电的时候,ESP8266必须要连接指定的热点,连接成功之后,才可联网,才可以继续执行程序。(你的手机同时也要开启热点,频段设置为2.4GHZ)
(2)如果是2G模块或者4G模块,就检查SIM卡是否插入,是否插入正确,2G模块要插移动卡,比如:SIM800C。
(3) ATK-ESP8266的电压接5V,不要接3.3V,怕你的USB线供电电流不够导致无法正常工作(不要用开发板自带的黑色USB线,用单独买的质量好一点的蓝色USB线)。

那么按照上面的操作之后,发现你的ESP8266还是连接不上? LCD显示屏还是卡住?

继续看下面的第【2】小节的内容。

(2)ESP8266-WIFI初始化不成功、ESP8266-WIFI连接不上热点怎么办?

如果你的项目是属于物联网的项目,也就是项目中用到了ESP8266-WiFi,一定要注意: 如果ESP8266无法正常工作,无法正常连接网络。整体的程序是无法正常运行的。也就造成了,屏幕不显示任何东西,按键无反应,等等现象。 这里一定要注意看。

先看这个博客:
https://blog.csdn.net/xiaolong1126626497/article/details/146318997

第一步,保证你的ESP8266接线正常,一定检查清楚。
如果还是无法解决,可以看我的B站视频(讲解ESP8266的调试):
https://www.bilibili.com/video/BV1ku4y1E74M

第二步,自己手机开热点的时候,要配置正确。
在这里插入图片描述
在这里插入图片描述

第三步,检查USB供电的线,需要质量好一点线,我文中用到的STM32F103RCT这款开发板本身自带的黑色USB线,质量特别差,所以在项目硬件材料里我都会让大家买一条蓝色USB下载线进行使用,原因就是这个。
在这里插入图片描述

第四步,打开串口调试助手,查看程序运行的状态。 如果WIFI连接不上,或者显示屏没什么反应。一定要打开串口调试助手看问题原因。

打印:WIFI:0 就表示ESP8266已经连接到路由器。 如果打印的是 WIFI:6 就表示ESP8266无法连接你的热点,这就要认真检查上面描述的这些问题了。 如果打印 WIFI:8 就表示连接不上MQTT服务器,要检查你的WIFI热点是否连接了互联网能不能上网。
在这里插入图片描述

在这里插入图片描述

第五步,如果不管如何接线,esp8266-WIFI都显示硬件检测错误,那么:最坏的结果,你的WIFI坏了,该换新的了。

可以重新买一个,买这一款。
https://item.taobao.com/item.htm?abbucket=2&id=669720765911&ns=1&pisk=fUroLOsKpzuWBmYmnZo5-T-emfQAwLiIPWKK9DhFujlX22ldPW039SgU20e8iXPTtvE8vk4XxRwQ2TidF0wSAD5O6GE3F8iCvRCpsuA2uAyqLLkeZ8oWUD5O6MYv341-Y7dhoLx2uAGqUvuEYtmqdAhEY2kz3tDEpQ8e4WW03jMpUeoEzqkqpAArYvkF0IknLQ8EUUoq0jMEYUlWU_lzYuEVN60eNUDcpoHorXxKiH0Qch3S_7c2Y1oIECGaUjxexb1Li_e0e_x_H0ZgsAFR03VgLRaEokAVsXZ03uzUhQXqj-4YW44caHcY2jgT4cvF4-moZVr7aMX3_-2UWqqAQGio4bzKVJpGw-quw8Z0pp8qq0UmSumNfQlLkRqnKk1Cm52UCyu0xQjPaE8aYzxIS_aMRegrhxc9E1i-MgxbsoXcnFcIzxMr6tXDRegrhxcOntYiV4kjUfC…&priceTId=2147804a17296673045032855ebf7f&skuId=4822574445585&spm=a21n57.1.item.42.656d523cJYhwBB&utparam=%7B%22aplus_abtest%22%3A%225b42f3c93ff81d4fde9ec8fd8b7d175c%22%7D&xxc=taobaoSearch
在这里插入图片描述

(3)继电器如何接?不会使用继电器怎么办。

看这个博客:
https://blog.csdn.net/xiaolong1126626497/article/details/146038825

(4)MQTT协议看不懂,我想学习项目里的MQTT协议代码如何编写的,怎么办?

看这个视频,讲解MQTT协议代码,如何从0开始一行一行写出来的。
https://www.bilibili.com/video/BV1BN4y1Y7cf

(5)如果使用SIM800C-GSM模块无法连接网络、无法初始化怎么?

如果你用的项目里使用了SIM800C、SIM900A这种2G的GSM模块,接线正确,串口调试助手缺打印初始化失败。
首先:插入的卡必须是移动或者联通卡。
然后,检查你附近是否还有移动、联通的2G基站。2G已经处于淘汰阶段,很多地方已经关闭了2G基站,如果已经关闭,就无法使用了。

(6)GPS无法定位成功,定位位置不刷新怎么办?

如果你的项目里用到了GOS模块。发现GPS模块上传到云平台的GPS定位没有更新。
解决: GPS模块必须在空旷地带使用,GPS模块定位成功之后,上面有一个红色的小灯,会1秒闪烁一次。 如果灯没有闪烁,就表示没有定位成功。 GPS信号无法穿墙,你在屋里是无法定位成功的。~
注意!!!GPS模块必须在空旷地带使用,室外才有信号。
注意!!!GPS模块必须在空旷地带使用,室外才有信号。
注意!!!GPS模块必须在空旷地带使用,室外才有信号。

(7)OneNet 新版界面更新了,不一样怎么办? 针对MQTT协议接入

讲解2024新版本OneNet云平台MQTT协议的使用(讲解设备上云以及可视化页面设计)

如果你看到的项目设计文档里描述的OneNet界面与现在不一样。

看区别在下面。

在这里插入图片描述

点击创建产品。
在这里插入图片描述

填写产品信息。

在这里插入图片描述

注意,注意,注意,这里填:数据流!!!数据流!!!数据流!!!
在这里插入图片描述
创建完成。
在这里插入图片描述
接下里与原文档里教程没什么区别,照着做就行了。

如果到了可视化界面设计的步骤,发现绑定数据源没有,怎么办?

OneNet更新之后,绑定数据源发生了变化,如果要正常找到数据流,看下面这样绑定。

image-20230927113458668

userId在这里看:

image-20230927113534977

accessKey在这里看:

image-20230927113734383

产品ID在这里看:

image-20230927113803107

设备名称在这里看:

image-20230927113844802

也可以看下面最新写的文档(不过这个是在专栏里,要订
阅才可以看):
https://blog.csdn.net/xiaolong1126626497/article/details/133923492

(8)OneNet多协议入口没有了怎么办?

如果你当前的项目,采用的HTTP协议接入OneNet,你现在注册的账号进去却看不到多协议接入,没有HTTP协议了是什么情况?
这是因为OneNet更新之后,关闭了新用户多协议入口 ,老用户还可以继续使用。
那怎么解决? 老用户都能使用,那说明功能还在,只是屏蔽了新用用户的入口。
可以这样解决: 你先正常登录OneNET,进入到控制台。然后。
复制这个链接:https://open.iot.10086.cn/develop/global/product/#/public?protocol=3&other=1 复制到浏览器里打开,就可以进入多协议的界面了。 这就是相当于点击隐藏掉的多协议按钮,跳转过去的网页地址。

下面是HTTP协议调试上传数据的效果视频:

OneNet-HTTP协议上传的模拟测试(TCP调试助手)

2024年4月13号之后,OneNet关闭了多协议新建设备的功能。不管是老用户,还是新用户。都无法新建设备,但是之前新建的项目还是正常可以使用,不受到影响。

如果你复刻我项目里的多协议项目,那么你就不用去做onenet的新建设备的操作。直接使用原来项目里设计好的OneNet链接就行可以了。按照原项目里的API KEY 上传数据,在设计好发布好的可视化页面上就可以看。

(9) (RTC时钟问题)界面上的时间,倒计时,不动,RTC初始化失败,如何解决?界面上时间显示不对如何解决?

这是针对2023年之前的老项目,对于2024年的项目修改时间在main函数里有注释看注释就知道了

如果你的项目里用到了RTC时钟,也就是界面会显示时间、显示倒计时之类的时间。 如果发现初始化一直卡住RTC初始化不动,或者是 RTC的计时时间不变)(界面上的时钟不动),一直静止状态。
可能板子上的RTC实时时钟晶振坏了 或者 虚焊了。 也就是芯片旁边的圆柱体晶振。你如果有电洛铁,在晶振的两个脚上点一下。焊接一下再试试。圆柱体的晶振就是 32.768KHZ,是实时时钟的晶振。 如果再不行,就换个板子试试,或者 换一个晶振焊接上去。

可以动手修改下RTC的初始化代码:

如何修改呢? 将源工程里rtc.c里的RTC_Init 函数代码全部删除。 注意,是RTC_Init 这个函数这段代码删除。 然后,将下面的代码贴进去。重新编译工程下载进去,测试倒计时,时钟 这些是否正常(如果还是不正常,就看这段代码的下面还有一个单独测试的工程测试RTC时钟,如果还是不行。那就是上面的问题了)。
在这里插入图片描述

/**
 * @brief       RTC写入后备区域SRAM
 * @param       bkrx : 后备区寄存器编号,范围:0~41
 * @param       data : 要写入的数据,16位长度
 * @retval      无
 */
void rtc_write_bkr(uint32_t bkrx, uint16_t data)
{
    uint32_t temp = 0;
    PWR->CR |= 1 << 8;  /* 取消备份区写保护 */
    temp = BKP_BASE + 4 + bkrx * 4;
    (*(uint16_t *)temp) = data;
}

/**
 * @brief       RTC读取后备区域SRAM
 * @param       bkrx : 后备区寄存器编号,范围:0~41
 * @retval      读取到的值
 */
uint16_t rtc_read_bkr(uint32_t bkrx)
{
    uint32_t temp = 0;
    temp = BKP_BASE + 4 + bkrx * 4;
    return (*(uint16_t *)temp); /* 返回读取到的值 */
}

/**
 * @brief       RTC初始化
 *   @note
 *              默认尝试使用LSE,当LSE启动失败后,切换为LSI.
 *              通过BKP寄存器0的值,可以判断RTC使用的是LSE/LSI:
 *              当BKP0==0X5050时,使用的是LSE
 *              当BKP0==0X5051时,使用的是LSI
 *              注意:切换LSI/LSE将导致时间/日期丢失,切换后需重新设置.
 *
 * @param       无
 * @retval      0,成功
 *              1,进入初始化模式失败
 */
u8 RTC_Init(void)
{
      /* 检查是不是第一次配置时钟 */
    uint16_t bkpflag = 0;
    uint16_t retry = 200;
    uint32_t tempreg = 0;
    uint32_t clockfreq = 0;

    RCC->APB1ENR |= 1 << 28;        /* 使能电源时钟 */
    RCC->APB1ENR |= 1 << 27;        /* 使能备份时钟 */
    PWR->CR |= 1 << 8;              /* 取消备份区写保护 */

    bkpflag = rtc_read_bkr(0);      /* 读取BKP0的值 */

    if (bkpflag != 0X5050)          /* 之前使用的不是LSE */
    {
        RCC->BDCR |= 1 << 0;        /* 开启外部低速振荡器 */
        
        while (retry && ((RCC->BDCR & 0X02) == 0))  /* 等待LSE准备好 */
        {
            retry--;
            delay_ms(5);
        }
        
        tempreg = RCC->BDCR;        /* 读取BDCR的值 */
        tempreg &= ~(3 << 8);       /* 清零8/9位 */

        if (retry == 0)             /* 开启LSE失败? */
        {
            RCC->CSR |= 1 << 0;         /* LSI使能 */
        
            while (!(RCC->CSR & 0x02)); /* 等待LSI就绪 */
            
            tempreg |= 1 << 9;          /* LSE开启失败,启动LSI. */
            clockfreq = 40000 - 1;      /* LSI频率约40Khz(参考F103数据手册说明) */
            rtc_write_bkr(0, 0X5051);   /* 标记已经初始化过了,使用LSI */
        }
        else
        {
            tempreg |= 1 << 8;          /* 选择LSE,作为RTC时钟 */
            clockfreq = 32768 - 1;      /* LSE频率为32.769Khz */
            rtc_write_bkr(0, 0X5050);   /* 标记已经初始化过了,使用LSE */
        }

        tempreg |= 1 << 15;             /* 使能RTC时钟 */
        RCC->BDCR = tempreg;            /* 重新设置BDCR寄存器 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        while (!(RTC->CRL & (1 << 3))); /* 等待RTC寄存器同步 */

        RTC->CRH |= 1 << 0;             /* SECF = 1, 允许秒中断 */
        RTC->CRH |= 1 << 1;             /* ALRF = 1, 允许闹钟中断 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        RTC->CRL |= 1 << 4;             /* 允许配置 */
        RTC->PRLH = 0X0000;
        RTC->PRLL = clockfreq;          /* 时钟周期设置(有待观察,看是否跑慢了?)理论值:32767 */
        RTC->CRL &= ~(1 << 4);          /* 配置更新 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        if (bkpflag != 0X5051)          /* BKP0的内容既不是0X5050,也不是0X5051,说明是第一次配置,需要设置时间日期. */
        {
            SetRtcTime(2024, 4, 29, 6, 59, 55);   /* 设置时间 */
        }
    }
    else     /* 系统继续计时 */
    {
        retry = 30;     /* 避免卡死 */
        
        while ((!(RTC->CRL & (1 << 3)) && retry))   /* 等待RTC寄存器同步 */
        {
            delay_ms(5);
            retry--;
        }

        retry = 100;    /* 检测LSI/LSE是否正常工作 */
        
        tempreg = RTC->DIVL;            /* 读取DIVL寄存器的值 */
        while (retry)
        {
            delay_ms(5);
            retry--;
            
            if (tempreg != RTC->DIVL)   /* 对比DIVL和tempreg, 如果有差异, 则退出 */
            {
                break;                  /* DIVL != tempreg, 说明RTC在计数, 说明晶振没问题 */
            }
        }
        if (retry == 0)
        {
            rtc_write_bkr(0, 0XFFFF);   /* 标记错误的值 */
            RCC->BDCR = 1 << 16;        /* 复位BDCR */
            delay_ms(10);
            RCC->BDCR = 0;              /* 结束复位 */
            return 1;                   /* 初始化失败 */
        }
        else
        {
            RTC->CRH |= 0X01;           /* 允许秒中断 */

            while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */
        }
    }

    STM32_SetPriority(RTC_IRQn,2,1);//设置RTC中断优先级   /* 优先级设置 */
    
    
    return 0;
}		 			


或者 下载这个工程测试一下RTC时钟: r如果这个工程测试也不行,那么就实锤了上面的问题
https://download.csdn.net/download/xiaolong1126626497/89225596

在这里插入图片描述

如何你的LCD界面上的时间显示的不是当前的时间,如何更改?
一些设计项目中时间并不是与网络同步的,如果时间不正确,需要自己更改。

在哪里更改?
在这里插入图片描述

设置之后编译代码下载进去,然后,板子断电,再重新上电就更新时间了。 (需要断电一次才会更新时间)

【10】腾讯云IOT的MQTT三元组,需要python环境,我没有怎么办?

如果你的项目用到腾讯云IOT服务器,那么在MQTT三元组秘钥生成章节,会用到一段python代码运行,如果你的电脑没有python环境,照着下面文章教程去搭建即可。
看这篇文章: Python入门开发: windows下搭建python开发环境(vscode)
https://blog.csdn.net/xiaolong1126626497/article/details/118497618

视频看这个:

腾讯云IOT平台生成MQTT三元组的过程(运行python)

【11】Qt工程源码打不开,编译报错怎么办?

如果你的设计里用到了上位机,需要自己开发上位机或者Android手机APP。
当你打开资料包里的Qt工程时,发现报错,无法编译,一堆红色。
如何解决?
(1) 照着文档里上位机章节说明,先把Qt环境安装好
(2)将资料包里的Qt工程拷贝出来,放在你电脑的英文路径下,再打开工程即可(工程文件的后缀就是.pro)。

【12】 Android开发环境如何搭建?

如果你的设计里用到了上位机,并且你需要自己编译出Android手机的APP。
这就需要搭建Anroid开发环境。 如果你只需要在电脑上编译运行,就不用这么麻烦。
如何搭建Android开发环境??
看这里: https://blog.csdn.net/xiaolong1126626497/article/details/117254453

【14】 电机怎么接?加热棒怎么接? 与继电器如何接?

在很多项目设计里,都用到了 抽水电机、散热风扇、充氧电机、加热模块,等等。
比如:智能鱼缸、智慧农业、智能花盆、盆栽种植 、大棚种植 这些项目里基本上都要 进行灌溉,抽水、加热,通风。 那如何接呢?

首先: 上面提到的这些模块,不能直接与单片机也就是STM32连接,需要通过继电器进行控制。 STM32控制继电器,继电器再去控制这些电机,实现最终的控制。

如果买回来的电机、加热棒有USB口怎么接? 要么买USB母头底座在板子上焊接一个转接口,要么直接把电机的USB接头剪掉,剥出里面的铜丝,连继电器即可。 那么,继电器如何接? 看上面的(3)小节的讲解。

【15】MQTT调试助手去哪里下载?

在物联网相关的项目里,会看到我的项目文档里用到MQTT调试助手进行与物联网平台互发数据进行测试,这个工具去哪里下载? 一般在资料包的工具目录下都会自带,如何没有也可以去下载。
下载地址: https://download.csdn.net/download/xiaolong1126626497/18784012

【16】 如何下载程序?STM32应该如何下载程序?

STM32可以支持两种方式下载:
(1) 串口下载。 串口下载HEX文件。
(2) 下载器下载。 通过ST-LINK、J-LINK 之类的下载器,点击keil软件里的下载按钮下载程序。

串口下载: 我项目里用到的最多的板子都是STM32F103RCT6这一款,这款板子本身自带了CH340芯片,也就是USB-TTL芯片,直接可以接电脑。 通过电脑打开串口,就可以下载程序。

这种下载方式不需要下载器,你只需要接一根USB线就可以下载。

接线图如下图:
在这里插入图片描述

打开程序下载工具: 看序号点击,下载即可。
在这里插入图片描述

具体下载也可以看视频:

讲解STM32如何通过串口下载程序

【17】LCD显示屏上半部分有雪花,有白色,显示不全如何解决?

我的很多项目里用到了1.44寸SPI接口的LCD显示屏,在我视频里和文档里看到,我当初做出的实物,显示一切正常;而你照着设计文档买好硬件,练好线,下载进去发现,LCD显示屏上半部分显示的不正确。

比如,错误效果如下:

在这里插入图片描述

问题原因:
因为这个显示屏的驱动IC芯片有更换,虽然照着链接买的看起来和我当初买的长的一样。显示屏本身的驱动IC有变化,导致驱动代码有变化。

解决办法:
打开STM32工程,找到lcd.c 或者 oled.c 源文件。
找到Lcd_SetRegion函数。

照着下面代码修改就行。

/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{		
	Lcd_WriteIndex(0x2a);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_start+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_end+2);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_start+1);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_end+1);
	
	Lcd_WriteIndex(0x2c);

}

【18】1.44寸的LCD显示屏的字有重叠?LCD显示屏的字显示不全?

问题和【17】差不多,都是驱动IC问题。

解决办法也很简单的。
只要你先找到代码里LCD显示屏的绘制函数。
比如:

LCD_ShowChineseFont(0,16*1+2,16,HZ_FONT_16[20],RED,0);
此函数:
第一个参数是设置显示的内容 横坐标(X)的位置。
第二个参数是设置显示的内容 纵坐标(Y)的位置。
第三个参数是设置显示的内容 字体大小。
第四个参数是设置显示的内容字模在数组里的下标。
第五个参数是设置显示的内容字体的颜色。
第六个参数是设置显示的内容背景的颜色。

只要搞清楚函数每个参数的含义,自己调整一下X、Y 的位置,就可以解决问题。

在这里插入图片描述

【19】腾讯云IOT平台更新了,界面与文档不一样怎么办啊?

如果你的项目用到了微信小程序、用到了腾讯云IOT平台,但是发现文档里的截图与你现在登录进去看到的界面长的不一样,这可怎么办啊?

问题原因,2024年3月份 腾讯云更新了物联网平台的界面展示,去掉了项目创建功能,进去就直接可以进行产品开发了省去了前面创建项目的y页面。 但是: 这并不影响使用。

看下图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
到了这一步,接着看文档的产品开发章节继续就行了,大同小异。
在这里插入图片描述

【20】 OneNet平台设计的可视化页面,点击按钮无法使用怎么办?

OneNet 在2023年4月份之后更新了平台,也就是现在看到的新版,物联网开发平台。

更新之后,我也写了教程,介绍新版物联网平台的使用办法,其实与原来的也差别不大,只是界面上改了样式,改了流程,核心是没变的。功能也是可以正常使用。

结果 后面OneNet内部数据迁移,改出了BUG,新版本平台可视化页面的全部输入控件都无法下发命令了。 不仅仅是按钮,是全部,所有的 输入类型的设备都无法发送,不管你是免费版,还是29块钱的企业版,还几大千专业版 统统无法使用了。 目前只能等待OneNet进行修复。才可以继续使用。

如果想继续发送命令控制STM32,那怎么办?
在设备后台输入命令发送就行了。 其实就是和在可视化页面点击按钮一样的。在可视化页面点击按钮也是和这里手动输入命令发现没区别的。就是多了一个界面。

在这里插入图片描述
可能就有同学问,我发送什么命令,这里我填什么?

这个很好理解的。 直接打开STM32的源码工程,找到main.c代码,翻到main.c最后的位置,可以看到代码里判断的命令。

这里发送与你按下按钮发送没有区别。 这里是手动编辑命令下发。

比如:下发的命令格式。

"LED_SW":1
"LED_SW":1
"MOTOR_SW":1
"MOTOR_SW":0
...
等等

【21】接电机,水泵,加热泵,充氧泵等等电机之后,整个设备就工作不正常了? 这个怎么解决?

在很多项目里,比如:水产养殖、智能鱼缸、智能饮水机等等项目里,都会用到电机、加热模块等等。
如果你的整个项目设备是采用USB线供电,整个设备模块的电源都从开发板上取电,这样是不行。 电机一转动,整个系统就会工作异常,比如: 温度读取不出来了,光敏读取也是错误。 特别是: 会导致ESP8266-WIFI断网,掉线,如果正在使用手机APP远程操作,微信小程序远程操作,电机一转动,你就发现无法控制了。

这个要怎么解决? 如果你的实物上确实需要接电机演示。

那么需要采用外部电源供电,买一个下面的 可调电源稳压模块 ,一个12V 、2A的电源插头就可以了。 买回来之后,将模块的电源都接在这个电源稳压模块上,将STM32开发板上的5V和GND分别用杜邦线接到稳压模块的5V和GND上即可。

采用外部电源供电,接好线之后的效果如下:
在这里插入图片描述

在这里插入图片描述

如果买的水泵是带USB接口的。可以买一个USB母座,方便接线。
链接:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.720c2e8daW68Pi&id=660481026591&_u=p1pq7ueo846a&skuId=4760127756241
在这里插入图片描述

(1)稳压模块

链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail

image-20230919222637274

img

(2)电源插头

链接:https://item.taobao.com/item.htm?id=616513772095&price=12.5-28&sourceType=item&sourceType=item&suid=28568653-f37a-44d9-ba7f-79370acc2a9e&ut_sk=1.Y%2BSje8BXEHwDAAzffoCNOQAM_21646297_1700218130362.TaoPassword-WeiXin.ShareGlobalNavigation_1&un=6f62cf65130082c7143b731291a8a715&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid2&sp_tk=cTJPQVczdDRwNFI%3D&cpp=1&shareurl=true&short_name=h.5kwQOCl&bxsign=scd4p22mFtBbwnGM_SWdgwgZ27RN8IEynH4PqvQihq_j_z9InPF1g10n1NbTKmLx8KZRz6HVuBpo_O9axHjCBbsVlVvTKl9u7l4CGsrBWq6-xf26Zvx5y-ND4YT_gNAlrvG&tk=q2OAW3t4p4R&app=chrome

image-20231212111308716

【22】电容触摸键盘无法使用如何解决?

之前很多项目里用到了电容触摸按键,原来的店铺里触摸按键升级了。原本项目代码无法使用。
新版的按键键盘驱动芯片换了,原来代码无法兼容。

可以在这里买项目里一样的之前的电容矩阵键盘:
https://item.taobao.com/item.htm?app=chrome&bxsign=scddfIsDSl5TauUwzXNou-6K3uhIT764ob-ctvEm3hTNQ40dYtEeY7sBLXcoppwDPB5s4uMmJ-dHSTQiAlx6XVYmwFA_zAm7Ik7poJA2bpqaDg7yYylUs7rrGKEJQE40shBJBw8zrP4xwgsxBgl9OTZaQ&cpp=1&id=739766244195&price=18&share_crt_v=1&shareurl=true&short_name=h.g03ocbA&sourceType=item,item&sp_tk=aVljdVdJaEY3eU4=&spm=a2159r.13376460.0.0&suid=1976c8fa-74e2-4894-bdc5-3ed8e7906bdf&tbSocialPopKey=shareItem&tk=iYcuWIhF7yN&un=d63971ee90e66b72cd6664ca157bcc86&un_site=0&ut_sk=1.ZVIcUAeojBoDAHiIpg94CyWH_21646297_1713787176064.Copy.ShareGlobalNavigation_1

看准这里。

在这里插入图片描述

在这里插入图片描述

【23】 物联网服务器的域名如果变成IP地址?

比如: 以华为云物联网服务器为例。
在这里插入图片描述

如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。

ping  65b0f8a974.st1.iotda-device.cn-north-4.myhuaweicloud.com

在这里插入图片描述

得到下面的IP地址信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)

华为云的MQTT服务器地址:117.78.5.125
华为云的MQTT端口号:1883

【24】 华为云IOT平台更新之后如何生成MQTT密码?

华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打开这个工具,填入设备的信息(也就是创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。

这样填:
在这里插入图片描述

填入设备的信息: (上面两行就是设备创建完成之后保存得到的)

直接得到三元组信息。
在这里插入图片描述
得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。

ClientId  662a2c5971d845632a06f9fb_dev1_0_0_2024042510
Username  662a2c5971d845632a06f9fb_dev1
Password  5bcc5df45ce9e8bfe40c20408de495304a80bca79bf9e64e41f536b40723f177

【25】有人4G模块模块的项目(可能的问题)

如果你复刻的项目路用到了有人科技的4G模块
比如:
154 基于STM32的森林火灾监控系统设计
149 基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)
100 基于STM32+OneNet设计的物联网智慧路灯
这些项目就用到了有人科技的4G 模块。

一定要看下面图片的说明。
在这里插入图片描述

看下面,将接收4G模块里代码部分的printf打印删除或者注释掉。 简单来说,就是 将下面图片里的全部printf代码行删除或者注释掉。
在这里插入图片描述

【26】树莓派系统镜像下载

链接:https://pan.baidu.com/s/1vYamLV9CPDbUF2wQMcbtPA?pwd=9ubq
提取码:9ubq
–来自百度网盘超级会员V8的分享

自己也可以问树莓派的商家要镜像资料下载。

【27】RC522刷卡模块无反应?或者同一张卡的卡号刷出来可能不一致?

如果你的项目里使用的RC522模块刷卡没有反应。
(1)检查接线是否正确
(2)RC522模块要焊接排针,焊接之后才可以使用
(3)RC522供电必须接3.3V
(4)使用的杜邦线检查是否有松动接触不良的情况。

如果以上检查了,你的刷卡模块还是无法正确刷卡。
那么,可以修改代码再测试下。 (防止可能不同版本的keil软件本身的优化机制,优化了 __nop();)
在这里插入图片描述
修改之后,再下载进去测试。

如果以上测试之后,发现RC522模块还是无法正常刷卡使用?

那么可能就是模块本身坏了。可以考虑更换模块再测试。

STM32+RFID-RC522模块刷卡效果

【28】SIM800C模块无法上传数据到OneNet云平台?

之前文章里的SIM800C模块商家的链接过期了。
下面这个商家的SIM800C可以使用。
链接:https://item.taobao.com/item.htm?abbucket=5&id=595955619423&ns=1&priceTId=2150407917166339557863879e961b&skuId=5521873678704&spm=a21n57.1.item.28.4de2523cMXukmD

在这里插入图片描述

本项目有好几个OneNet的项目是采用的SIM800C模块链接,通过SIM800C连接OneNet上传数据,通过HTTP协议上数据到云平台。

因为SIM800C是2G模块(支持联通和移动的2G),随着时代的发展,现在的2G基站已经慢慢的淘汰了。 SIM800C使用起来信号就不会很好,如果你使用的SIM800C的位置距离2G的基站很远,可能联网的速度就很慢。

将项目代码下载进去之后,如果你接好了SIM800C,串口打印出来看到初始化也成功了,但是运行时,串口打印是发送数据失败,OneNet无法接收数据。

那么这个问题可能是SIM800C信号比较弱,连接服务器的时间太长,导致代码里原来的等待时间超时。
可以在以下的位置增加延时函数测试问题。
看下面的截图: 增加延时等待网络连接成功。
在这里插入图片描述

代码中:

printf("连接服务器的状态:%d\r\n",SIM800C_Connect_TCP_Server("183.230.40.33","80"));

这函数就是配置SIM800C去链接服务器的。 如果服务器连接成功,会返回CONNECT OK

如果上面的延时可以解决问题,为了更加方便等待SIM800C网络连接成功。

可以增加一个函数,用来等待CONNECT OK返回。

注意:当前的SIM800C是接在串口2的,也就是PA2 和 PA3上的。

int WaitConnect_ok(void)
{
	 int j=0;
	if(strstr((char*)USART2_RX_BUFFER,"CONNECT OK"))
	{
		  printf("WaitConnect_ok:%s\r\n",USART2_RX_BUFFER);
		 	return 0;
	}
	 USART2_RX_FLAG=0;
   USART2_RX_CNT=0;
	 memset(USART2_RX_BUFFER,0,sizeof(USART2_RX_BUFFER));
	
	 for(j=0;j<1000;j++) //等待的时间(ms单位)
      {
          if(USART2_RX_FLAG)
          {
              USART2_RX_BUFFER[USART2_RX_CNT]='\0';
						  printf("WaitConnect_ok:%s\r\n",USART2_RX_BUFFER);
              if(strstr((char*)USART2_RX_BUFFER,"CONNECT OK"))
              {
                  return 0;
              }
              else break;
          }
          delay_ms(20); //一次的时间
      }
			return 1;
}

在这里插入图片描述

然后,在发送数据的函数的这个位置增加函数的调用。

printf("GPRS服务建立状态:%d\r\n",WaitConnect_ok());

函数在连接服务器的代码下面调用。 具体看下面图片的标识。 (注意:我这只是以某个项目为例的,你自己复刻的项目里如果用到了SIM800C上传数据到OneNet,你的函数名字不一定于我截图长的一样,但是你只需要知道,增加的这个函数的目的是: 为了等待SIM800C链接你附近的基站成功,并且通过基站链接服务器成功; 所以,将增加的这个等待放在你的sim800.c里链接服务器的函数下面调即可。)
在这里插入图片描述

或者看这个截图。
在这里插入图片描述

【29】OneNet(MQTT)协议生成的密码无法登陆?

在这里插入图片描述
et 时间填大一点。 这个软件win11上无法生成正确的密码。在win10上运行,无法在win11运行。

【30】婴儿床的播放器模块与喇叭接线

在婴儿床的项目中,用到了音乐播放器播放安抚音乐。很多同学不知道这个 音乐播放器与继电器,喇叭与播放器之间如何接线,这里就画了一个图。 其中,音乐播放器上有两个红色圈圈的位置,需要焊接2个针出来,就可以单独接杜邦线了。

在这里插入图片描述

【31】 Air724UG模块提示主题订阅失败?

(1)首先,Air724UG模块 是4G模块,需要插电话卡才可以使用,插入的SIM卡要能正常使用,不能欠费,需要正常能够注册网络的卡才可以。

比如:下面这种就是没插卡的提示。
在这里插入图片描述

如果是这种提示: 这是你的模块都没有插好,模块的线接错了,电源接错了导致的(如果!如果!如果!你的开发板接了电池,外部电源,STM32的右下角的5V和GND一定要接到你的电池或者电源的5V、GND上,一定,一定注意)。
在这里插入图片描述

(2)手机卡都是小卡,如果你是取下了你手机的卡准备插入4G模块,你需要配一张卡套。
(3)4G模块购买的时候可以选择物联网卡套餐,每个月有30M流量这种,这种卡是物联网卡。 物联网是可以上网,不能发送短信,如果你的项目里有短信报警功能的,就不能使用此卡。

如果插卡,大家可以看一下视频:

4G模块如何插卡?(SIM卡)

如果的显示屏上显示 主题订阅失败,一般是是什么问题导致的?
(1) 可能是你的MQTT三元组格式填错了,也就是main.c文件最前面MQTT几个参数认真认真检查,参数是否填错了。 可以先用MQTT调试助手软件测试。测试成功了,在复制粘贴到你的 main.c 文件替换对应的参数。

(2)可能你之前配置过其他的MQTT参数,也成功进入主页面了,然后你又修改了新的MQTT参数,导致模块上电重新自动连接上次配置的MQTT,你新配置的MQTT没有设置成功。

先找到Air724UG.c文件,找到里面的一个函数Air724UG_MQTT_Init
加入下面 的代码。

	//断开关闭TCP连接:AT+MIPCLOSE
	sprintf(Air724UG_CMD_BUFF,"AT+MIPCLOSE\r\n");
    run_state=Air724UG_SendCmd(Air724UG_CMD_BUFF);
    printf("------------------------------------\r\n");
    printf("%s",USART2_RX_BUFFER);
    printf("------------------------------------\r\n"); 
	
	
	//关闭MQTT连接:AT+MDISCONNECT
	sprintf(Air724UG_CMD_BUFF,"AT+MDISCONNECT\r\n");
    run_state=Air724UG_SendCmd(Air724UG_CMD_BUFF);
    printf("------------------------------------\r\n");
    printf("%s",USART2_RX_BUFFER);
    printf("------------------------------------\r\n"); 

在这里插入图片描述

在修改一下指令。

AT+MCONNECT

在这里插入图片描述
这样改。

    run_state=Air724UG_SendCmd("AT+MCONNECT=1,120\r\n");
    printf("------------------------------------\r\n");
    printf("%s",USART2_RX_BUFFER);
    printf("------------------------------------\r\n");  

修改完了,再编译代码,下载代码。

同时你可以打开串口调试助手,看STM32内部输出的信息。
在这里插入图片描述
比如我串口完整打印的初始化状态:

------------------------------------
AT+CGMI

+CGMI: "AirM2M"

OK
------------------------------------
------------------------------------
AT+CGMR

+CGMR: "AirM2M_Air724UG_V401880_LTE_AT"

OK
------------------------------------
------------------------------------
AT+CPIN?

+CPIN: READY

OK
------------------------------------
------------------------------------
AT+CSQ

+CSQ: 19,99

OK
------------------------------------
------------------------------------
AT+CREG?

+CREG: 0,1

OK
------------------------------------
------------------------------------
AT+CGREG?

+CGREG: 0,1

OK
------------------------------------
------------------------------------
AT+CGATT?

+CGATT: 1

OK
------------------------------------
------------------------------------
AT+CSTT="","",""

+CME ERROR: 3

------------------------------------
------------------------------------
AT+CSTT?

+CSTT: "","",""

OK
------------------------------------
设置自动选择APN已经成功!!!!
------------------------------------
AT+CIICR

+CME ERROR: 3

------------------------------------
------------------------------------
AT+CIFSR

10.22.56.78
------------------------------------
------------------------------------
AT+MCONFIG="dev1","c76433HqmR","version=2018-10-31&res=products%2Fc76433HqmR&et=1802577162&method=sha1&sign=9HgKljaK7xbUHFADsM4WjmJTRes%3D"

OK
------------------------------------
------------------------------------
AT+MIPSTART="183.230.40.96",1883

OK

ALREADY CONNECT
------------------------------------
------------------------------------
AT+MQTTSTATU

+MQTTSTATU :1

OK
------------------------------------
已经登陆认证过,可以PUB数据了....
------------------------------------
AT+MSUB="$sys/c76433HqmR/dev1/#",1

OK

SUBACK
------------------------------------
主题订阅成功...
AT+MSUB="$sys/c76433HqmR/dev1/#",1

OK

SUBACK

【31】Python代码无法运行?

目前项目里有291284288、等编号的项目,使用了Python编写了后端服务器,HTML编写的前端可视化页面。
如果第一次安装好python、安装好VSCODE之后运行代码会报错 如何解决。

如果是提示缺少flask,安装就可以了。

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

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

在这里插入图片描述

【32】电力信息采集模块的接线说明

其中的继电器的IN口,看你自己的原理图或者接线说明接。
在这里插入图片描述

【33】DS18B20温度显示85℃?显示0℃??怎么解决?

按下面截图,找到读取温度的函数,加一个延时再测试。
在这里插入图片描述

五、关于Qt上位机的源码编译问题

优先看这里:QT工程打开、编译、运行流程
优先看这里:QT工程打开、编译、运行流程
优先看这里:QT工程打开、编译、运行流程
优先看这里:QT工程打开、编译、运行流程
QT工程打开、编译、运行流程
https://blog.csdn.net/xiaolong1126626497/article/details/146185260

如果你的项目用到了Qt上位机,一定要看下本小节的内容。

注意!注意! 你的Qt环境必须要是QT5.12.6 ,我的版本是QT5.12.6。 一定要安装这个版本。

QT5.12.6 的安装包网盘下载地址: 也就去Qt官网下载。
https://pan.quark.cn/s/f40557068445

Qt上位机源码如何打开?编译?运行?

【1】QT工程如何打开和使用?

(1)在你的项目源码路径下可以看到上位机源码工程。
(2)一定要将上位机源码目录拷贝到你电脑上纯英文路径(别放桌面)。最好在你D盘新建一个纯英文目录,将此源码拷贝过去。路径中一定不能有中文。
(3)如果你源码目录有一个后缀是.pro.user的文件,要先删除,再打开工程。
(4)如果你已经安装好了Qt环境,然后双击工程文件就可以打开项目。
在这里插入图片描述

【2】用到了第三方库?比如:OpenCV、ffmpeg怎么运行?

如果你的Qt上位机项目用到OpenCV、ffmpeg等等第三方库。 打开工程之后,编译运行,程序会提示异常结束,无法正常运行。怎么办?
这个是因为,你Qt程序运行之后无法找到你的第三库的DLL文件,就无法正常运行。

最简单的操作,你将我的资料包《可执行程序》目录里全部文件(除了应用程序EXE文件可以不拷贝),拷贝到 你自己Qt编译生成的exe应用程序路径下即可。
在这里插入图片描述

如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程编译成功之后,在下面都会有提示的。
看下面的截图。

【3】你自己 编译的Qt程序,获取Token失败怎么办? (华为云IOT项目的上位机)

首先你观察,你的Qt控制台输出的信息是不是提示一堆SSL相关的警告?

如果是,就是说明: 你的Qt环境缺少了SSL协议,也就是openSSL的库。 导致Qt无法使用https的API链接。故而无法正常获取token,也无法正常使用其他功能。

如何解决?
最简单的操作,从这里下载需要的SSL库文件。 https://download.csdn.net/download/xiaolong1126626497/89309957
将这2个文件拷贝到你程序编译后生成的 应用程序 相同目录下即可,重新在Qt软件里编译运行,测试即可。

或者 你打开我的资料包里《windows可执行程序》目录里找到这两个库,拷贝到 你自己Qt编译生成的exe应用程序路径下,重新在Qt软件里编译运行,测试即可。
在这里插入图片描述

如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程编译成功之后,在下面都会有提示的。
看下面的截图。
在这里插入图片描述

【4】如何搭建Qt的Android环境?

Qt可以编译Android的APP,但是编译Android的APP需要自己搭建Android环境。

我提供了搭建环境的教程。在我的博客里,不过要花费29.9订阅Qt的技术文章专栏才可以看。这个文章在Qt的技术文章专栏里。 你也可以百度搜索教程自己搭建。

付费教程链接:https://blog.csdn.net/xiaolong1126626497/article/details/117254453

【5】Qt上位机的源码修改问题? 华为云IOT上位机项目

如果使用的是华为云的IOT项目,想要自己修改上位机的源码,改成自己的设备那么看下面图片说明。

工程样式:1: 注意: 172编号以后的项目看这里(新项目)。
https://blog.csdn.net/xiaolong1126626497/article/details/146185260

工程样式:2: 注意: 172编号之前的项目看这里(旧项目)。
在这里插入图片描述

但是注意了,如果你的项目工程用的华为云IOT平台是基础版(现在新用户没有基础版,都是标准版的)

如果你要改成标准版使用,要修改的地方就多一些。
看下图。

这个链接要改成自己设备的。这个链接如何获取? 你在看文档的时候应该看到我讲解了在线调试设备,在线修改设备属性。在调试页面右上角调试成功,就会有一个链接,贴过来替换下面的的链接即可。

这个链接要改成自己设备的。这个链接如何获取? 你在看文档的时候应该看到我讲解了在线调试设备,在线获取影子数据。在调试页面右上角调试成功,就会有一个链接,贴过来替换下面的的链接即可。
在这里插入图片描述

这个链接就是在这里获取(看下图)。
在这里插入图片描述

还有一点要注意: 华为云基础版 和标准版 修改设备属性时,下发的属性格式不一样。

标准版的格式是这样的: 就是下发的命令属性的JSON格式。 如果你原来是基础版,要换标准版,修改Qt上位机的时候要注意这个问题,不然无法下发,会报错。

{"services":{"motor":1}}

也可以看视频:

介绍STM32物联网项目工程移植需要修改的地方

我这里再重新叙述一遍: (这里是以 105 基于STM32设计的汽车修理厂环境检测系统为例,介绍QT上位机源码如何修改 ) 这个项目就是基础版的华为云设计的,而现在的新建的华为云是默认为标准版,怎么改? 看下面截图。

在这里插入图片描述

这是设备的账号信息 。 根据自己的实际情况替换。

在这里插入图片描述

这是查询设备属性 。 也就是获取影子数据的API接口。
在这里插入图片描述

这是修改设备属性 。 也就是给设备下发控制命令的API接口。
在这里插入图片描述

就完成了。

六、 关于上位机源码问题

如果是从我的微信公众号里下载的项目资料包,这里不用看,直接忽略。
如果项目用的是OneNet云平台、阿里云云平台、腾讯云微信小程序,这里也不用看,直接忽略。

我做的STM32项目里,有很多涉及到需要自己开发上位机APP,也就是手机APP 的项目,部分项目源码在CSDN上,STM32源码和上位机源码是分开的,是两个资源包。如果不修上位机源码,不自定义更改,就不需要单独去下载上位机的源码。 在设计文档里的上位机设计章节,已经详细讲解如何设计上位机,设计过程,拿去写文档,贴图,都完全够了。 这就是复刻项目的最简单,最容易的步骤。

如果确实需要修改或增加上位机的功能,要修改Qt源码,可以参考文档自己设计,也可以去单独下载。

下面是CSDN博客里部分,独立的上位机源码下载链接,根据自己的项目找到对应的上位机即可,如果找不到也可以私信问我。

【1】基于树莓派+华为云设计的智能家居系统-Qt上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/88798014

【2】基于STM32+华为云设计的智慧农业灌溉系统【华为云IOT】-Qt上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/88561390

【3】基于STM32+华为云设计的智慧农业灌溉系统(升级版)项目的Qt上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/88561385

【4】基于STM32设计的智能婴儿床控制系统-Qt上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/88842288

【5】基于STM32+华为云设计的智能鱼缸-Qt上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/88539687

【6】基于STM32设计的智能教室管理系统-Qt上位机源码(智慧大屏).zip
https://download.csdn.net/download/xiaolong1126626497/88541655

【7】114 基于STM32的熏艾式空气消毒装置设计与实现【Qt上位机源码】.zip

https://download.csdn.net/download/xiaolong1126626497/90035427

【8】基于STM32设计的人体健康监护系统(Qt上位机源码包)
https://download.csdn.net/download/xiaolong1126626497/88462877

【9】基于STM32的智能花盆系统设计与实现(Qt上位机源码包)
https://download.csdn.net/download/xiaolong1126626497/88439627

【10】 基于STM32设计的小龙虾养殖系统【Qt上位机源码】
https://download.csdn.net/download/xiaolong1126626497/88917639

【11】106 基于STM32设计的城市绿化云端监控系统【Qt上位机源码】
https://download.csdn.net/download/xiaolong1126626497/88921525

【12】132 基于STM32设计的口罩识别和无线测温系统【Qt上位机源码】
https://download.csdn.net/download/xiaolong1126626497/88968240

【13】123 基于物联网的智能浇水系统(STM32+华为云IOT)-上位机源码.zip
https://download.csdn.net/download/xiaolong1126626497/89165977

【14】105 基于STM32的汽车修理厂环境监测-Qt上位机源码.7z
https://download.csdn.net/download/xiaolong1126626497/89221595

【15】基于STM32+华为云IOT设计的智能浇花系统-序号112.zip
https://download.csdn.net/download/xiaolong1126626497/87853772

七、OneNet替换腾讯云IOT平台

【OneNet平台2025版保姆教程(腾讯云IOT转OneNet平台必看)】 https://www.bilibili.com/video/BV17oAgexEPf

OneNet平台2025版保姆教程(腾讯云IOT转OneNet平台必看)

7.1 前言

从2024年06月20日起, 新注册腾讯云物联网开发平台的用户需购买公共实例激活码才可使用公共实例,在此时间之前注册的用户并已开通公共实例的用户则不受影响。

目前大部分主流平台都已经进入收费阶段,只有华为云目前完全免费,OneNet免费(可视化界面设计部分功能收费,29一个月)。 腾讯云、阿里云都已经进入了收费模式。

下面是官网的公告。

image-20240918142211785

现在登录腾讯云物联网开发平台 已经没有免费的公共实例可以使用,需要购买激活码才可继续使用。

image-20240918142045068

7.2 OneNet替换腾讯云IOT

之前做的很多项目是基于腾讯云物联网开发平台设计的,如果购买的基于腾讯云物联网开发平台设计的项目源码,因为腾讯云物联网开发平台更新的问题无法再继续使用免费的公共实例,需要购买才可以使用;如果不想花钱购买腾讯云的物联网平台,可以采用中国移动的OneNet物联网开发平台替换。

因为腾讯云物联网平台替换为OneNet平台最简单。 而且OneNet平台设计的界面比微信小程序更加漂亮。

目前中国移动的OneNet物联网开发平台还是可以继续免费使用。

对于【OneNet】平台不了解的同学,要认真看一下这个视频,是一个手把手的保姆级教学视频,教导OneNet如何使用。不懂的地方也可以随时问我。

关于中国移动的OneNet物联网开发平台 的使用可以看视频教程:https://www.bilibili.com/video/BV12m421u7A5

也可以看文档(如果订阅了CSDN的物联网专栏 或者 微信公众号里的物联网项目合集),分享的项目里有很多采用OneNet做的项目,也可以通过这些项目文章了解中国移动的OneNet物联网开发平台的使用办法。

那么很多同学可能会问: 我现在的项目是采用腾讯云物联网开发平台做的,如果我换成中国移动的OneNet物联网开发平台,整个项目改动的地方多吗? 如果没有基础第一次复刻开发项目能不能自己替换修改?

答案: 修改的地方不多,可以自己替换完成修改。

为什么说,修改的地方不多?

比: 我们做的物联网项目可能是:基于STM32+XXX物联网平台设计的XXX项目。

这些项目里面的STM32硬件端XXX物联网平台通信都是采用的MQTT协议。(可能很多同学暂时还不懂什么是MQTT协议,但是这不重要)

我们使用的腾讯云IOT物联网平台中国移动OneNet物联网平台华为云物联网平台阿里云物联网平台 等等,这些物联网平台都是一个服务器,准确说是MQTT物联网服务器,都是支持MQTT协议接入。

我们的项目可以接入腾讯云物联网平台,也是采用的MQTT协议接入。 如果想替换成其他的云,代码改动的地方多吗? 并不多的,因为其他平台也是支持MQTT协议接入。 这就是标准协议的好处。 替换物联网平台,代码改动的地方很少(下面会单独说明)。

7.3 修改说明:STM32代码

7.3.1 OneNet如何得到MQTT三元组?

关于OneNet的使用,可以看这篇文章学习(免费的)。

https://blog.csdn.net/xiaolong1126626497/article/details/144806792

7.3.2 替换MQTT三元组(常规操作)

需要修改的地方: MQTT三元组。 (这个是替换你自己物联网服务器的MQTT信息)

在你的项目代码里,main.c最前面可以看到关于物联网服务器的信息定义,具体看下图。 将此处的信息替换成你自己MQTT服务器的信息就可以了。

image-20240918145434533

7.3.3 修改上传的数据格式。

每个项目里在main.c文件里main函数中的while(1)循环里面都可以看到下面截图类似的代码。 这个就是组合将要上传的数据,准备下一步上传到物联网开发平台。

image-20240918145950149

每个物联网开发平台的数据格式都不一样,OneNet有自己格式,腾讯云也有自己的格式,大同小异。

注意: 上面截图里的代码,只是一个很普通的字符串拼接,大家不要看的太神秘,很高级。 只要你懂得C语言的字符串,慢慢看一下就知道这份代码的含义。

我举个例子【1】: 【192 独居老人居家监护系统】

这是腾讯云IOT需要的数据格式。

 sprintf(tmp_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"HeartRate\":%d,\"DHT11_T\":%d,\"DHT11_H\":%d,\"MLX90614\":%.1f,\"MQ7\":%d,\"People\":%d,\"Fall\":%d,\"RespiratoryRate\":%d}}",
            HeartRate,DHT11_T,DHT11_H,MLX90614,MQ7,People,Fall,RespiratoryRate);

这是OneNet需要的数据格式。

sprintf(tmp_buff,"{\"id\":123,\"dp\":{\"HeartRate\":[{\"v\":%d}],\"DHT11_T\":[{\"v\":%d}],\"DHT11_H\":[{\"v\":%d}],\"MLX90614\":[{\"v\":%.1f}],\"MQ7\":[{\"v\":%d}],\"People\":[{\"v\":%d}],\"Fall\":[{\"v\":%d}],\"RespiratoryRate\":[{\"v\":%d}]}}			",HeartRate,DHT11_T,DHT11_H,MLX90614,MQ7,People,Fall,RespiratoryRate);

我举个例子【2】: 【227 基于单片机的人体健康监测设计】

这是腾讯云IOT需要的数据格式。

 sprintf(mqtt_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"HeartRate\":%d,\"SPO\":%d,\"LU90614\":%.1f,\"MPU6050\":%d}}",
HEART,SPO2,LU90614,mpu6050_fall_flag);

这是OneNet需要的数据格式。

//更新OneNet
sprintf(mqtt_buff,"{\"id\":123,\"dp\":{\"angle\":[{\"v\":%d}],\"DS18B20\":[{\"v\":%.1f}],\"water_data\":[{\"v\":%d}],\"water_ctrl\":[{\"v\":%d}],\"mode\":[{\"v\":%d}],\"heat\":[{\"v\":%d}],\"water_filter\":[{\"v\":%d}],\"DS18B20_MAX\":[{\"v\":%d}],\"water_level\":[{\"v\":%d}]}}", angle,DS18B20,water_data,water_ctrl,mode,heat,water_filter,DS18B20_MAX,water_level);    

我举个例子【3】: 【187 基于STM32设计的物联网智能鱼缸】

这是腾讯云IOT需要的数据格式。

sprintf(tmp_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"ds18b20_max\":%d,\"adc_hp_max\":%d,\"time_food\":%d,\"auto_mode\":%d,\"water_hp\":%d,\"temp_data\":%.2f,\"BH1750\":%d,\"MQ135\":%d,\"oxygen_sw\":%d,\"heat_sw\":%d,\"led_sw\":%d}}",
            ds18b20_max,adc_hp_max,time_food,auto_mode,water_hp,temp_data,BH1750,MQ135,motor_oxygen,temp_heat,LED3_B);

这是OneNet需要的数据格式。

sprintf(tmp_buff,"{\"id\":123,\"dp\":{\"ds18b20_max\":[{\"v\":%d}],\"adc_hp_max\":[{\"v\":%d}],\"time_food\":[{\"v\":%d}],\"auto_mode\":[{\"v\":%d}],\"water_hp\":[{\"v\":%d}],\"temp_data\":[{\"v\":%.1f}],\"BH1750\":[{\"v\":%d}],\"MQ135\":[{\"v\":%d}],\"motor_oxygen\":[{\"v\":%d}],\"temp_heat\":[{\"v\":%d}],\"LED3_B\":[{\"v\":%d}],}}",
            ds18b20_max,adc_hp_max,time_food,auto_mode,water_hp,temp_data,BH1750,MQ135,motor_oxygen,temp_heat,LED3_B);
            

我举个例子【4】: 【236 基于STM32+4G通信技术设计远程农田灌溉系统】

这是腾讯云IOT需要的数据格式。

sprintf(data_buff,"{\\22method\\22:\\22report\\22,\\22clientToken\\22:\\22123\\22,\\22params\\22: \
            {\\22DHT11_T\\22:%d,\\22DHT11_H\\22:%d,\\22BH1750\\22:%d,\\22DS18B20\\22:%f,\\22mode_type\\22:%d, \
            \\22MOTOR_SW\\22:%d,\\22Water_MIN\\22:%d,\\22WaterLevel\\22:%d}}",
            DHT11_T,DHT11_H,BH1750,DS18B20,ctrl_mode,MOTOR_SW,Water_MIN,Water_level); 
           

这是OneNet需要的数据格式。

//OneNet的格式
sprintf(data_buff,"{\\22id\\22:123,\\22dp\\22:{\\22DHT11_T\\22:[{\\22v\\22:%d}],\\22DHT11_H\\22:[{\\22v\\22:%d}],\\22BH1750\\22:[{\\22v\\22:%d}],\\22DS18B20\\22:[{\\22v\\22:%.1f}],\\22mode_type\\22:[{\\22v\\22:%d}],\\22MOTOR_SW\\22:[{\\22v\\22:%d}],\\22Water_MIN\\22:[{\\22v\\22:%d}],\\22WaterLevel\\22:[{\\22v\\22:%d}]}}",
			DHT11_T,DHT11_H,BH1750,DS18B20,ctrl_mode,MOTOR_SW,Water_MIN,Water_level);
			            

我举个例子【5】: 【163 基于STM32+微信小程序设计的智能门锁】

这是腾讯云IOT需要的数据格式。

//更新微信小程序
sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"lock\":%d}}",Motor);
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("更新门锁状态:开锁\r\n");   

这是OneNet需要的数据格式。

//更新OneNet
sprintf(mqtt_message,"{\"id\":123,\"dp\":{\"lock\":[{\"v\":%d}]}}",Motor);
			MQTT_PublishData(POST_TOPIC,mqtt_message,0);
			USART1_Printf("更新门锁状态:开锁\r\n");		            

我举个例子【6】: 【175 基于STM32设计的牛羊喂养系统】

这是腾讯云IOT需要的数据格式。

sprintf(tmp_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"HX711\":%d,\"DHT11_T\":%d,\"DHT11_H\":%d,\"ADC\":%d,\"button\":0}}",
            Weight_Residue,DHT11_T,DHT11_H,water_Residue);

这是OneNet需要的数据格式。

//更新OneNet
sprintf(tmp_buff,"{\"id\":123,\"dp\":{\"HX711\":[{\"v\":%d}],\"DHT11_T\":[{\"v\":%d}],\"DHT11_H\":[{\"v\":%d}],\"ADC\":[{\"v\":%d}],\"button\":[{\"v\":0}]}}",
			Weight_Residue,DHT11_T,DHT11_H,water_Residue);            

我举个例子【7】: 【171 基于STM32+微信小程序设计的智能宠物喂养系统_标准版】

这是腾讯云IOT需要的数据格式。

//上报数据
sprintf(mqtt_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"DS18B20\":%d,\"weight\":%d,\"time\":%d,\"button\":%d}}",
temp_ds18b20,Weight_Shiwu,time_food,button);

这是OneNet需要的数据格式。

//更新OneNet
sprintf(mqtt_buff,"{\"id\":123,\"dp\":{\"DS18B20\":[{\"v\":%d}],\"weight\":[{\"v\":%d}],\"time\":[{\"v\":%d}],\"button\":[{\"v\":%d}]}}", temp_ds18b20,Weight_Shiwu,time_food,button);         

我举个例子【6】: 【175 基于STM32设计的牛羊喂养系统】

这是腾讯云IOT需要的数据格式。

sprintf(tmp_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"HX711\":%d,\"DHT11_T\":%d,\"DHT11_H\":%d,\"ADC\":%d,\"button\":0}}",
            Weight_Residue,DHT11_T,DHT11_H,water_Residue);

这是OneNet需要的数据格式。

//更新OneNet
sprintf(tmp_buff,"{\"id\":123,\"dp\":{\"HX711\":[{\"v\":%d}],\"DHT11_T\":[{\"v\":%d}],\"DHT11_H\":[{\"v\":%d}],\"ADC\":[{\"v\":%d}],\"button\":[{\"v\":0}]}}",
			Weight_Residue,DHT11_T,DHT11_H,water_Residue);            

我举个例子【8】: 【213 基于STM32设计的智能饮水机_升级版(微信小程序)】

这是腾讯云IOT需要的数据格式。

//上报数据
sprintf(mqtt_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\": \
 {\"angle\":%d,\"DS18B20\":%.1f,\"water_data\":%d,\"water_ctrl\":%d,\"mode\":%d, \
 \"heat\":%d,\"water_filter\":%d,\"DS18B20_MAX\":%d,\"water_level\":%d}}",
angle,DS18B20,water_data,water_ctrl,mode,heat,water_filter,DS18B20_MAX,water_level);
            

这是OneNet需要的数据格式。

//更新OneNet
sprintf(mqtt_buff,"{\"id\":123,\"dp\":{\"angle\":[{\"v\":%d}],\"DS18B20\":[{\"v\":%.1f}],\"water_data\":[{\"v\":%d}],\"water_ctrl\":[{\"v\":%d}],\"mode\":[{\"v\":%d}],\"heat\":[{\"v\":%d}],\"water_filter\":[{\"v\":%d}],\"DS18B20_MAX\":[{\"v\":%d}],\"water_level\":[{\"v\":%d}]}}", angle,DS18B20,water_data,water_ctrl,mode,heat,water_filter,DS18B20_MAX,water_level);    
     

我举个例子【9】: 【228 基于STM32设计的烘干车间远程控制系统(腾讯云IOT))】

这是腾讯云IOT需要的数据格式。

//组合JSON报文数据
                sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\": \
                {\"DHT11_T\":%d,\"DHT11_H\":%d,\"MQ135\":%d,\"Motor_SW\":%d,\"Heat_SW\":%d,\"MQ135_Flag\":%d,\"mode_type\":%d,\"DHT11_T_MAX\":%d,\"DHT11_H_MAX\":%d}}",
                DHT11_T,DHT11_H,MQ135,Motor_SW,Heat_SW_flag,MQ135_Flag,mode_type,DHT11_T_MAX,DHT11_H_MAX);
                
				   

这是OneNet需要的数据格式。

		//组合JSON报文数据
				//OneNet的格式
				sprintf(data_buff,"{\"id\":123,\"dp\":{\"DHT11_T\":[{\"v\":%d}],\"DHT11_H\":[{\"v\":%d}],\"MQ135\":[{\"v\":%d}],\"Motor_SW\":[{\"v\":%d}],\"Heat_SW\":[{\"v\":%d}],\"MQ135_Flag\":[{\"v\":%d}],\"mode_type\":[{\"v\":%d}],\"DHT11_T_MAX\":[{\"v\":%d}],\"DHT11_H_MAX\":[{\"v\":%d}]}}",
				DHT11_T,DHT11_H,MQ135,Motor_SW,Heat_SW_flag,MQ135_Flag,mode_type,DHT11_T_MAX,DHT11_H_MAX);
							

其他的平台就按自己平台规定的格式上传数据即可。

不要被一大串数据迷惑了,这就是一个字符串拼接,里面的\这种是转义符。

STM32代码端,只需要改这2个地方,其他依旧如原本项目一样使用即可,具体使用可以看原本项目对应的视频。

7.4 修改说明:服务器配置(手把手教程)

如果你的项目原本是腾讯云IOT平台,现在想替换成OneNet平台,那么应该如何去创建实现?

基本上这些物联网平台使用都有5个步骤:

(1)创建产品

(2)创建数据流(有些平台叫创建属性、或者 物模型 这些都只是一个名字)

(3)创建设备

(4)得到MQTT三元组

(5)得到订阅主题格式、发布主题格式,发布的数据组合格式

主要关注的是 (2)创建数据流物模型 的名字。

如果你的项目是腾讯云IOT平台,你在你项目文档里可以看到原本项目开发的时候创建了物模型也就是填写了每个物模型的名字。

如果你现在采用onenet替换实现原本的项目,你在onenet创建的时候也会有一个步骤是创建数据流,你只需要照着原来文档里的腾讯云创建物模型的名字挨个去创建你onenet的数据流就行了。创建完就完成。

其他的步骤,具体可以直接看 OneNet的视频: https://www.bilibili.com/video/BV12m421u7A5

7.5 OneNet生成密码

很多同学反馈,使用OneNet提供的token.exe生成密码,不正常,无法登陆,导致断开连接。
在这里插入图片描述

此软件win11运行生成的密码可能不正确 或者 你自己填写的超时时间不对 。导致无法登陆。

为此,我提供了一份Python代码,实现此密码生成的算法。
建议大家,用我提供的代码,使用Python生成密码。解决此问题。

还不用考虑过期时间问题。非常的方便。你只需要安装好Python环境就可以了。

完整的代码如下。`

import base64
import hmac
from urllib.parse import quote
import time

# 中国移动官方文档给出的核心秘钥计算算法
def token(id,access_key):  
    version = '2018-10-31'
    res = 'products/%s' % id  # 通过产品ID访问产品API
    # 用户自定义token过期时间
    et = str(int(time.time()) + 63072000) # 设置为2年有效时间
    # 签名方法,支持md5、sha1、sha256
    method = 'sha1'
    # 对access_key进行decode
    key = base64.b64decode(access_key)
    # 计算sign
    org = et + '\n' + method + '\n' + res + '\n' + version
    sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
    sign = base64.b64encode(sign_b.digest()).decode()
    # value 部分进行url编码,method/res/version值较为简单无需编码
    sign = quote(sign, safe='')
    res = quote(res, safe='')
    # token参数拼接
    token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
    return token

username    = "DGvoS8UR1Q"                                           # 产品ID
accesskey   = "aTF1a2JDc2s0QlNEMFZHU0l6QnJFbDd1Z1oxMUlZOGI="         # accessKey
password = token(username, accesskey)
print(password)

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DS小龙哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值