admin 管理员组

文章数量: 887018

项目设计里用到的全部工具软件,都可以在这里下载。
https://pan.quark/s/145a9b3f7f53

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

文章目录

  • 一、复刻项目的一般步骤
    • 1.1 第1步
    • 1.2 第2步
    • 1.3 第3步
    • 1.4 第4步
    • 1.5 第5步
    • 1.4 第5步
    • 1.5 对于使用华为云IOT服务器的项目
  • 二、 复刻的流程描述
  • 三、关于供电问题(很重要,很重要)
    • 【1】解决方案1
    • 【2】解决方案2
  • 四、复刻过程中可能会出现的各种问题疑问
    • (1)LCD显示屏为什么不亮?下载代码之后屏幕不显示怎么办? ESP8266-WIFI显示硬件初始化错误或者连接不上热点怎么办? 屏幕上一直显示 WIFI Connect怎么办??
    • (2)ESP8266-WIFI初始化不成功、ESP8266-WIFI连接不上热点怎么办?
    • (3)继电器如何接?不会使用继电器怎么办。
    • (4)MQTT协议看不懂,我想学习项目里的MQTT协议代码如何编写的,怎么办?
    • (5)如果使用SIM800C-GSM模块无法连接网络、无法初始化怎么?
    • (6)GPS无法定位成功,定位位置不刷新怎么办?
    • (7)OneNet 新版界面更新了,不一样怎么办? 针对MQTT协议接入
    • (8)OneNet多协议入口没有了怎么办?
    • (9) (RTC时钟问题)界面上的时间,倒计时,不动,RTC初始化失败,如何解决?界面上时间显示不对如何解决?
    • 【10】腾讯云IOT的MQTT三元组,需要python环境,我没有怎么办?
    • 【11】Qt工程源码打不开,编译报错怎么办?
    • 【12】 Android开发环境如何搭建?
    • 【13】开发板的电源不够接?如何扩展?
    • 【14】 电机怎么接?加热棒怎么接? 与继电器如何接?
    • 【15】MQTT调试助手去哪里下载?
    • 【16】 如何下载程序?STM32应该如何下载程序?
    • 【17】LCD显示屏上半部分有雪花,有白色,显示不全如何解决?
    • 【18】1.44寸的LCD显示屏的字有重叠?LCD显示屏的字显示不全?
    • 【19】腾讯云IOT平台更新了,界面与文档不一样怎么办啊?
    • 【20】 OneNet平台设计的可视化页面,点击按钮无法使用怎么办?
    • 【21】接电机,水泵,加热泵,充氧泵等等电机之后,整个设备就工作不正常了? 这个怎么解决?
    • 【22】电容触摸键盘无法使用如何解决?
    • 【23】 物联网服务器的域名如果变成IP地址?
    • 【24】 华为云IOT平台更新之后如何生成MQTT密码?
    • 【25】有人4G模块模块的项目(可能的问题)
    • 【26】树莓派系统镜像下载
    • 【27】RC522刷卡模块无反应?或者同一张卡的卡号刷出来可能不一致?
    • 【28】SIM800C模块无法上传数据到OneNet云平台?
    • 【29】OneNet(MQTT)协议生成的密码无法登陆?
    • 【30】
  • 五、关于Qt上位机的源码编译问题
    • 【1】QT工程如何打开和使用?
    • 【2】用到了第三方库?比如:OpenCV、ffmpeg怎么运行?
    • 【3】你自己 编译的Qt程序,获取Token失败怎么办? (华为云IOT项目的上位机)
    • 【4】如何搭建Qt的Android环境?
    • 【5】Qt上位机的源码修改问题? 华为云IOT上位机项目
  • 六、 关于上位机源码问题
  • 七、OneNet替换腾讯云IOT平台
    • 7.1 前言
    • 7.2 OneNet替换腾讯云IOT
    • 7.3 修改说明:STM32代码
      • 7.3.1 替换MQTT三元组(常规操作)
      • 7.3.2 修改上传的数据格式。
    • 7.4 修改说明:服务器配置

一、复刻项目的一般步骤

有2案例视频,演示了从0开始复刻项目的过程:

这是案例【1】

STM32项目复刻实物的过程演示(从0开始演示组装过程)

这是案例【2】

【2】STM32项目制作过程演示(环境检测类物联网项目)

程序下载过程讲解【3】

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

下面以 某 个STM32项目为例。 所有的项目复刻过程都是以下的流程。

首先说明: 如果是单片机、STM32的项目。 你想打开项目源码,编译,就需要自己要安装好keil软件、安装keil5,如果不会安装百度自行找教程安装。 设计文档里都没有写keil软件的安装教程,这是单片机开发最基础的工具。

这里是keil的完整安装包的下载地址:
https://pan.quark/s/4b10a7f126c6

keil软件的安装教程

项目设计里用到的全部工具软件,都可以在这里下载。
https://pan.quark/s/145a9b3f7f53

1.1 第1步

照着设计文档,买回来硬件模块。

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

1.2 第2步

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

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

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

下面是接线的过程:

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

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

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

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

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

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

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

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

最终的效果:

1.3 第3步

使用手机开一个热点。
(1)名字设置为: abc
(2)密码设置为:12345678

注意事项:
WIFI频段设置为:2.4GHZ

千万注意:热点的名字,密码,频段一点要设置正确。 否则,到时候,ESP8266-WIFI连接不上。 ESP8266 只能连接2.4GHZ的WIFI。

一切额外的情况:有些手机开启的热点后设置为2.4GHZ还是连接不上,这一般是热点的加密方式ESP8266不支持,可以将你手机的热点设置为开放网络,也就是不要密码,任何人可以连接这种,再次测试。 STM32代码不用改,只要WIFI的名称一样即可

1.4 第4步

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

打STM32的keil工程。

打开之后,先设置keil的编码。

然后再看下面的图片改代码:

如果你是华为云物联网云平台,还需要改一处地方。
看下面图片。

还可以看视频:

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

1.5 第5步

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

具体下载过程看下面图:

打开程序下载软件:

还可以看视频:

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

1.4 第5步

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

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

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

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

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

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

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

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

1.5 对于使用华为云IOT服务器的项目

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

你现在的项目用到了华为云IOT服务器,也用到了Android手机APP。 如果你想最简单,不要太多基础进行复刻项目,就不要改STM32代码,也就是不改里面的一行代码,直接下载代码就行了,QT上位机源码也不用改,因为安装我资料包里提供的手机APP安装包和Windows可执行文件打开使用就行了。 (如果发现自带的APP更新Token失败,那就说明原来的华为云服务器无法使用了,那这时候就需要你自己照着文档创建服务器,完成设计了)

正常情况,也就是说,最简单你在复刻华为云的项目过程中,你华为云的账号都不用创建的.

如果你想用自己的华为云账号,那么就需要自己照着文档创建华为云服务器,修改STM32代码,修改QT源码重新编译生成APP。APP的修改教程可以看第五章节有专门的介绍,APP上位机代码如何打开,如何修改,如何连接自己的华为云服务器。

二、 复刻的流程描述

在电脑上解压已经下载好的项目资料包,认真看设计文档,买好硬件材料,硬件接线查看文档STM32设计章节的第1小节,有详细描述如何接线,一定要认真看着说明接,接好线,下载代码进去就可以了。

只要按照我说的做,只要模块材料齐全,1天时间内(都用不到一天),就可以完全做出我博客一模一样,完全一样的设计。

整体步骤复述:

(1) 下载自己想复刻的项目资料包

(2) 电脑安装好keil软件(我用的keil5)

(3)打开资料包里自带的PDF设计文档,先将设计文档整体阅读一遍(不要走马观花),先将文档内容阅读一次之后,对文档的内容有一个大致的记忆,一定要记得看目录,文档都有目录。

(4)照着设计文档里第二章,去买好项目所需的全部硬件材料(STM32开发板不要乱换,换了代码就得有改动,除非你有能力改代码)。

(5)如果你复刻的项目里涉及到云平台:比如,OneNet、腾讯云+微信小程序,华为云IOT服务器,那么就按照文档的步骤一步一步去完成设计,完成模拟数据上传以及测试。

(6)将淘宝买回来的模块按照设计文档STM32设计章节第1小节的硬件连线介绍,将模块与STM32连接好。

项目里唯一需要焊接的地方是,解决电源不够接扩展电源的情况下焊接排针扩展电源。

如果你不方便焊接,可以直接在淘宝买电源扩展板。
链接: https://item.taobao/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN

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

(7)打开keil工程(工程文件一般在STM32源码目录下的USER目录下,只要安装好keil,就会自动识别工程文件)。如果你的项目涉及到云,比如:OneNet、腾讯云+微信小程序,华为云IOT服务器,那么需要打开工程里main.c文件,翻到最前面有几个宏定义,设置MQTT服务器的三元组,设置ESP8266连接的WIFI名称和热点。要根据自己的实际情况进行修改。 MQTT三元组,订阅主题、发布主题等等,根据自己在步骤(5)里测试最终得到的结果如实填入就行。 如果是用的onenet的HTTP协议上传云端数据,代码里要修改自己的API KEY ,代码里都会有注释,如果用的SIM800C联网 要注意插移动卡和联通卡。

注意: 如果你的项目用的是华为云IOT物联网服务器,肯定会用到Qt设计的Android手机APP,如果你简单复刻项目,就不要改STM32代码里的MQTT任何东西,QT上位机源码也不用改,安装我资料包里提供的手机APP安装包或者Windows可执行文件打开使用就行了。 如果你确实要修改或者增加上位机APP的工程,你下载的资料包里又没有上位机源码,可以单独下载,在我的CSDN博客里可以单独下载(CSDN里部分涉及华为云的项目资料,QT上位机源码和STM32源码是分开的),如果是在我的微信公众号里下载的项目,就不用管,微信公众号里下载的资源包都是带了上位机源码的。

(8)打开keil工程编译,编译成功之后,将程序下载到STM3开发板即可。下载方式看自己,串口下载也可以,使用stlink、jlink之类的下载器都可以,自己会哪种就用哪种,我基本上是采用串口下载HEX文件,这个在每个项目的演示视频里我也演示过,视频都在我的B站里。
地址在这里:
https://space.bilibili/68130189

我的微信公众号名称: 《DS小龙哥嵌入式技术资讯》 打开微信搜索一下,就可以找到我的微信公众号。在我的CSDN文章最底下,最底下,也有我的微信公众号的推广,点开就可以关注。

三、关于供电问题(很重要,很重要)

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

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

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

【1】解决方案1

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

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

采用外部电源供电,接好线之后的效果如下:

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

稳压模块购买

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

电源插头购买

链接:https://item.taobao/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

【2】解决方案2

如果你的设计不方便有线电源供电,可以买2节18650的锂电池供电。
链接: https://item.taobao/item.htm?app=chrome&bxsign=scdWKVX6xkbedt27TdLuqsjKd4c34isdT0gZpZ6Rql3CrMhv4w1KkR960SB5uamO4RV9gBhyxDg2apbGLyi-QEbVPbZlprpy__rI36GVSLcuW3FXEyfFlrP2duVwIh-_HKE&cpp=1&id=680313999743&price=13.8-57.8&shareUniqueId=25182787879&share_crt_v=1&shareurl=true&short_name=h.5qalsefob26nVI9&skuId=4973548713014&sourceType=item,item&sp_abtk=gray_1_code_simpleAndroid2&sp_tk=cGNoOFc3d1VmelI=&spm=a2159r.13376460.0.0&suid=2d94278f-4fab-44a0-b64a-1682588b096f&tbSocialPopKey=shareItem&tk=pch8W7wUfzR&un=5e1fcf13ad2864b5c078635431fc6d24&un_site=0&ut_sk=1.YJxexVHulMoDAFMawSZrEvzT_21646297_1705592795291.Copy.1



在这里插入图片描述

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

在复刻的时候,很多同学都会问,我用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无法正常工作,无法正常连接网络。整体的程序是无法正常运行的。也就造成了,屏幕不显示任何东西,按键无反应,等等现象。 这里一定要注意看。

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

第二步,自己手机开热点的时候,频段要设置成2.4GZ,一定要注意。ESP8266只能支持2.4GZH频段。 如果发现还=初始化正常,热点名字密码全部正确,还是连接不上? 检查电压是不是接的5V(ATK-ESP8266 WIFI接5V电压稳定一点,USB线一定要质量好点的, 千万别用商家送的黑色USB线,质量太差了)。 如果还是连接不上: 直接关闭你手机开的WIFI热点
加密方式,也就不要设置密码,设置为开放网络再试试。
STM32那边代码不用改。只要你WIFI热点的名字是对的就行了。

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

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

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

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

换新就买这一款ESP8266-01S (电压接3.3V) 便宜点。
https://detail.tmall/item.htm?abbucket=2&id=678401641076&ns=1&skuId=4866568712625&spm=a21n57.1.item.4.ba10523cUiNHCu

与ATK-ESP8266相比。 ESP8266-01S模块,要多接一个EN脚(也就是使能脚)接3.3V即可。

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

看这个视频,讲解继电器的。
https://www.bilibili/video/BV1FC4y1J7k2/

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

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

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

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

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

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

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

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

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

看区别在下面。

点击创建产品。

填写产品信息。

注意,注意,注意,这里填:数据流!!!数据流!!!数据流!!!

创建完成。

接下里与原文档里教程没什么区别,照着做就行了。

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

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

userId在这里看:

accessKey在这里看:

产品ID在这里看:

设备名称在这里看:

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

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

如果你当前的项目,采用的HTTP协议接入OneNet,你现在注册的账号进去却看不到多协议接入,没有HTTP协议了是什么情况?
这是因为OneNet更新之后,关闭了新用户多协议入口 ,老用户还可以继续使用。
那怎么解决? 老用户都能使用,那说明功能还在,只是屏蔽了新用用户的入口。
可以这样解决: 你先正常登录OneNET,进入到控制台。然后。
复制这个链接:https://open.iot.10086/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/download/xiaolong1126626497/89225596

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

在哪里更改?

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

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

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

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

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

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

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

第二种办法: 直接淘宝买电源扩展板。
链接: https://item.taobao/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN

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

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

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

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

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

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

在物联网相关的项目里,会看到我的项目文档里用到MQTT调试助手进行与物联网平台互发数据进行测试,这个工具去哪里下载? 一般在资料包的工具目录下都会自带,如何没有也可以去下载。
下载地址: https://download.csdn/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,那怎么办?
在设备后台输入命令发送就行了。 其实就是和在可视化页面点击按钮一样的。在可视化页面点击按钮也是和这里手动输入命令发现没区别的。就是多了一个界面。


可能就有同学问,我发送什么命令,这里我填什么?

这个很好理解的。 你是不是在可视化页面配过按钮下:如果你是这样配置的: led_sw:{V} 这个就是命令格式。 {V} 需要替换成具体的值。 比如: led_sw:1 led_sw:0 发送出去。这就是命令

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

你点击按钮,按下开就是发送: led_sw:1 ,按下关就是发送: led_sw:0

当前,你千万别认为只能发送: led_sw:1 和 led_sw:0 我只是举例子。 你的按钮当初怎么配置的,就填什么命令。

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

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

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

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

采用外部电源供电,接好线之后的效果如下:

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

(1)稳压模块

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

(2)电源插头

链接:https://item.taobao/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

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

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

可以在这里买项目里一样的之前的电容矩阵键盘:
https://item.taobao/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-north-4.myhuaweicloud/

打开这个工具,填入设备的信息(也就是创建完设备之后保存的信息),点击生成,就可以得到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/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/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】

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

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

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

QT5.12.6 的安装包网盘下载地址: 也就去Qt官网下载。
https://pan.quark/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/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/xiaolong1126626497/article/details/117254453

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

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

工程样式:1:

工程样式:2:

但是注意了,如果你的项目工程用的华为云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/download/xiaolong1126626497/88798014

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

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

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

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

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

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

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

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

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

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

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

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

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

七、OneNet替换腾讯云IOT平台

7.1 前言

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

下面是官网的公告。

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

7.2 OneNet替换腾讯云IOT

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

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

关于中国移动的OneNet物联网开发平台 的使用可以看视频教程:https://www.bilibili/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 替换MQTT三元组(常规操作)

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

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

7.3.2 修改上传的数据格式。

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

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

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

我举个例子:

这是腾讯云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);

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

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

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

7.4 修改说明:服务器配置

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

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

(1)创建产品

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

(3)创建设备

(4)得到MQTT三元组

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

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

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

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

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

也可以看一下具体的项目文章。https://blog.csdn/xiaolong1126626497/category_10192120.html

本文标签: 常见问题 合集 实时 流程 项目