本文章内容会实时更新,常见的问题会随时记录在册。
有2案例视频,演示了从0开始复刻项目的过程:
这是案例【1】
STM32项目复刻实物的过程演示(从0开始演示组装过程)
这是案例【2】
【2】STM32项目制作过程演示(环境检测类物联网项目)
下面以 某 个STM32项目为例。 所有的项目复刻过程都是以下的流程。
首先说明: 如果是单片机、STM32的项目。 你想打开项目源码,编译,就需要自己要安装好keil软件、安装keil5,如果不会安装百度自行找教程安装。 设计文档里都没有写keil软件的安装教程,这是单片机开发最基础的工具。
这里是keil的完整安装包的下载地址: https://pan.quark.cn/s/4b10a7f126c6
项目设计里用到的全部工具软件,都可以在这里下载。 https://pan.quark.cn/s/145a9b3f7f53
照着设计文档,买回来硬件模块。
每个项目都设计文档: 打开设计文档的目录查看,找到硬件选型
章节,买回项目所需要的硬件,每个模块的硬件型号,硬件链接都贴了的。照着点击链接去买就行了,毫无压力。
硬件买回来之后,然后按照硬件接线
章节的硬件连线说明,将模块与STM32开发板之间连接好线。
每个项目都设计文档: 打开设计文档的目录查看,找到STM32设备端代码
设计章节,找到硬件连线说明。
可能需要注意的一些问题:如果你接线之后,发现某些模块无法正常使用。 接线也没错。 比如: RC522刷卡模块、步进电机模块、这些模块。 注意去对比下你下载的STM32工程代码里的接线说明。 每个工程里每个模块都有对应的.h文件,.h文件里有说明当前工程里模块对应的接线。 文档的内容写完就发表,而代码可能会因为后续调试做一些更改,没有更新文档,不过这个只是少部分项目。 大家复刻的时候注意看下工程对应接线就行。 有问题也可以私信问。
下面是接线的过程:
按照设备文档的说明,买回来硬件之后,拆开快递,拿出来的模块,就是下面这样的。
然后照着设计文档的说明使用杜邦线进行接线就行了。
不知道如何接线? 没关系,我下面以DHT11温湿度传感器为例,画图说明。你看懂了这个。其他模块也差不多的。
注意: 如果是 OLED显示屏,直接插上去就行了,买的开发板上本身就有排母,照着接,看准开发板板子上的 丝印说明,靠左插入,开发板的排母右边最终会空出一个多余的插孔叫BL
,这个OLED显示屏用不到。
如果是LCD显示屏直接插上去就行。
注意: 开发板自带了4个按键,其中第2是个RST
是复位键、另外3个按键是可编程的独立按键。
如果硬件接线里有说板载按键、板载LED灯
,就是说的板子本身自带的按键和LED,不用接。
如果想固定板子,可以买个热熔枪+热熔胶棒,将模块固定在板子上。
最终的效果:
使用手机开一个热点。 (1)名字设置为: abc (2)密码设置为:12345678
注意事项: WIFI频段设置为:2.4GHZ
千万注意:热点的名字,密码,频段一点要设置正确。 否则,到时候,ESP8266-WIFI连接不上。 ESP8266 只能连接2.4GHZ的WIFI。
一切额外的情况:有些手机开启的热点界面显示叫2.4GHZ实际是假的!!,它其实是5GHZ,看起来设置正确,ESP8266却连接不上。你可以换个手机开热点再进行连接测试。
如果你的项目用到了云服务器。也就是物联网平台。那么就需要修改代码,设置连接你自己的设备。
打STM32的keil工程。
打开之后,先设置keil的编码。
然后再看下面的图片改代码:
如果你是华为云物联网云平台,还需要改一处地方。 看下面图片。
还可以看视频:
介绍STM32物联网项目工程移植需要修改的地方
打开工程,代码修改完毕之后,编译代码、然后,使用USB线将开发板的左边的USB口(串口1)与电脑的USB连接,打开程序下载软件下载程序。
具体下载过程看下面图:
打开程序下载软件:
还可以看视频:
STM32单片机程序下载方法讲解
下载成功之后,串口调试助手会打印初始化过程。 比如:ESP8266的初始化过程,以及WIFI热点的连接过程。
串口调试助手网上随便找一个就行了,任何串口调试助手都可以的,只是为了看一下打印的信息。
如何提示ESP8266-错误,那么就认真检查WIFI接线。
如果显示WIFI连接失败,请认真检查 第三步。
如果一切正常,就进入了程序主界面。
这时候,打开微信小程序(如果你是微信小程序) 或者 手机APP(如果你是手机APP) ,也能看到设备的最新数据,点击控制按钮,也能控制设备了。
到此,恭喜你,整个项目已经完成开发。
注意: 如果你的项目用到了手机APP 或 Window上位机 ,你可以直接将资料包里的 Android手机的安装包(后缀是.apk)的文件拷贝到手机直接安装使用。 如果是Window上位机直接双击可执行目录下的exe应用程序文件运行。
很多同学担心华为云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连接好。
(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.com/68130189
我的微信公众号名称: 《DS小龙哥嵌入式技术资讯》 打开微信搜索一下,就可以找到我的微信公众号。在我的CSDN文章最底下,最底下,也有我的微信公众号的推广,点开就可以关注。
很多设计里用到的MQ2、MQ4、MQ3、MQ7、MQ135、MQxxx 系列的模块,还用到了电机、风扇、充氧泵等一系列电机,还用到了SIM800C这种2G模块、Air724UG等这种4G模块,ESP8266这种WIFI模块。 如果板子只是一根USB线供电,可能会导致系统供电不足。
出现的现象就是: (1)板子插电脑上,发现串口被占用,串口无法使用。 (2)ESP8266硬件初始化错误,或者WIFI初始化之后却连接不上网络,SIM800C初始化不成功,4G模块无法联网等等问题。
那如何解决供电不足的问题?
(1)如果你的设计可以用有线电源供电,就买下面推荐的稳压模块。
那么需要采用外部电源供电,买一个下面的 可调电源稳压模块 ,一个12V 、2A的电源插头就可以了。 买回来之后,将模块的电源都接在这个电源稳压模块上,将STM32开发板上的5V和GND分别用杜邦线接到稳压模块的5V和GND上即可。
采用外部电源供电,接好线之后的效果如下:
稳压模块购买
电源插头购买
在这里插入图片描述
在复刻的时候,很多同学都会问,我用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里有没有,如果有就可以。
这些问题都是指向一个问题: 你的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】小节的内容。
如果你的项目是属于物联网的项目,也就是项目中用到了ESP8266-WiFi,一定要注意: 如果ESP8266无法正常工作,无法正常连接网络。整体的程序是无法正常运行的。也就造成了,屏幕不显示任何东西,按键无反应,等等现象。 这里一定要注意看。
第一步,保证你的ESP8266接线正常,一定检查清楚。 如果还是无法解决,可以看我的B站视频(讲解ESP8266的调试): https://www.bilibili.com/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.com/item.htm?abbucket=2&id=678401641076&ns=1&skuId=4866568712625&spm=a21n57.1.item.4.ba10523cUiNHCu
与ATK-ESP8266相比。 ESP8266-01S模块,要多接一个EN脚(也就是使能脚)接3.3V即可。
看这个视频,讲解继电器的。 https://www.bilibili.com/video/BV1FC4y1J7k2/
看这个视频,讲解MQTT协议代码,如何从0开始一行一行写出来的。 https://www.bilibili.com/video/BV1BN4y1Y7cf
如果你用的项目里使用了SIM800C、SIM900A这种2G的GSM模块,接线正确,串口调试助手缺打印初始化失败。 首先:插入的卡必须是移动或者联通卡。 然后,检查你附近是否还有移动、联通的2G基站。2G已经处于淘汰阶段,很多地方已经关闭了2G基站,如果已经关闭,就无法使用了。
如果你的项目里用到了GOS模块。发现GPS模块上传到云平台的GPS定位没有更新。 解决: GPS模块必须在空旷地带使用,GPS模块定位成功之后,上面有一个红色的小灯,会1秒闪烁一次。 如果灯没有闪烁,就表示没有定位成功。 GPS信号无法穿墙,你在屋里是无法定位成功的。
讲解2024新版本OneNet云平台MQTT协议的使用(讲解设备上云以及可视化页面设计)
如果你看到的项目设计文档里描述的OneNet界面与现在不一样。
看区别在下面。
点击创建产品。
填写产品信息。
注意,注意,注意,这里填:数据流!!!数据流!!!数据流!!!
创建完成。
接下里与原文档里教程没什么区别,照着做就行了。
如果到了可视化界面设计的步骤,发现绑定数据源没有,怎么办?
OneNet更新之后,绑定数据源发生了变化,如果要正常找到数据流,看下面这样绑定。
userId在这里看:
accessKey在这里看:
产品ID在这里看:
设备名称在这里看:
也可以看下面最新写的文档(不过这个是在专栏里,要订 阅才可以看): https://blog.csdn.net/xiaolong1126626497/article/details/133923492
如果你当前的项目,采用的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 上传数据,在设计好发布好的可视化页面上就可以看。
如果你的项目里用到了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界面上的时间显示的不是当前的时间,如何更改? 一些设计项目中时间并不是与网络同步的,如果时间不正确,需要自己更改。
在哪里更改?
设置之后编译代码下载进去,然后,板子断电,再重新上电就更新时间了。 (需要断电一次才会更新时间)
如果你的项目用到腾讯云IOT服务器,那么在MQTT三元组秘钥生成章节,会用到一段python代码运行,如果你的电脑没有python环境,照着下面文章教程去搭建即可。 看这篇文章: Python入门开发: windows下搭建python开发环境(vscode) https://blog.csdn.net/xiaolong1126626497/article/details/118497618
视频看这个:
腾讯云IOT平台生成MQTT三元组的过程(运行python)
如果你的设计里用到了上位机,需要自己开发上位机或者Android手机APP。
当你打开资料包里的Qt工程时,发现报错,无法编译,一堆红色。
如何解决?
(1) 照着文档里上位机章节说明,先把Qt环境安装好
(2)将资料包里的Qt工程拷贝出来,放在你电脑的英文路径下,再打开工程即可(工程文件的后缀就是.pro
)。
如果你的设计里用到了上位机,并且你需要自己编译出Android手机的APP。 这就需要搭建Anroid开发环境。 如果你只需要在电脑上编译运行,就不用这么麻烦。 如何搭建Android开发环境?? 看这里: https://blog.csdn.net/xiaolong1126626497/article/details/117254453
当你的模块都买回来时,接线发现,板子的电源口太少了,模块很多,电源不够接,怎么解决?
有两种办法: 第一种: 需要焊接排针。 淘宝购买两排单排排针。 然后在PCB洞洞板上焊接两排排针扩展电源。 看下面的图片: 两排排针底部 是联通的。 焊接好之后,分别用两根杜邦线,将排针分别插在开发板的5V和GND电源口上,这样就可以将板子的5V和GND扩展出多个,你的模块就可以正常接了。
如果你不会焊接怎么办? 但是又想焊接,你可以去外面 修手机修电脑的店铺,让他们帮忙给你焊接一下排针即可。
第二种办法: 直接淘宝买电源扩展板。 链接: https://item.taobao.com/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN
买2个扩展板,方便分别扩展5v电源 和 3.3V电源。 将开发板的5V和3.3V电源分别用杜邦线接入到下面的扩展板最前面横着的一排的VCC和GND上。其他模块就可以将电源接在此扩展板上竖着的VCC和GND上了,解决电源不够接的问题。
在很多项目设计里,都用到了 抽水电机、散热风扇、充氧电机、加热模块,等等。 比如:智能鱼缸、智慧农业、智能花盆、盆栽种植 、大棚种植 这些项目里基本上都要 进行灌溉,抽水、加热,通风。 那如何接呢?
首先: 上面提到的这些模块,不能直接与单片机也就是STM32连接,需要通过继电器进行控制。 STM32控制继电器,继电器再去控制这些电机,实现最终的控制。
如果买回来的电机、加热棒有USB口怎么接? 要么买USB母头底座在板子上焊接一个转接口,要么直接把电机的USB接头剪掉,剥出里面的铜丝,连继电器即可。 那么,继电器如何接? 看上面的(3)小节的讲解。
在物联网相关的项目里,会看到我的项目文档里用到MQTT调试助手进行与物联网平台互发数据进行测试,这个工具去哪里下载? 一般在资料包的工具目录下都会自带,如何没有也可以去下载。 下载地址: https://download.csdn.net/download/xiaolong1126626497/18784012
STM32可以支持两种方式下载: (1) 串口下载。 串口下载HEX文件。 (2) 下载器下载。 通过ST-LINK、J-LINK 之类的下载器,点击keil软件里的下载按钮下载程序。
串口下载: 我项目里用到的最多的板子都是STM32F103RCT6这一款,这款板子本身自带了CH340芯片,也就是USB-TTL芯片,直接可以接电脑。 通过电脑打开串口,就可以下载程序。
这种下载方式不需要下载器,你只需要接一根USB线就可以下载。
接线图如下图:
打开程序下载工具: 看序号点击,下载即可。
具体下载也可以看视频:
STM32单片机程序下载方法讲解
我的很多项目里用到了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);
}
问题和【17】差不多,都是驱动IC问题。
解决办法也很简单的。 只要你先找到代码里LCD显示屏的绘制函数。 比如:
LCD_ShowChineseFont(0,16*1+2,16,HZ_FONT_16[20],RED,0);
此函数:
第一个参数是设置显示的内容 横坐标(X)的位置。
第二个参数是设置显示的内容 纵坐标(Y)的位置。
第三个参数是设置显示的内容 字体大小。
第四个参数是设置显示的内容字模在数组里的下标。
第五个参数是设置显示的内容字体的颜色。
第六个参数是设置显示的内容背景的颜色。
只要搞清楚函数每个参数的含义,自己调整一下X、Y 的位置,就可以解决问题。
如果你的项目用到了微信小程序、用到了腾讯云IOT平台,但是发现文档里的截图与你现在登录进去看到的界面长的不一样,这可怎么办啊?
问题原因,2024年3月份 腾讯云更新了物联网平台的界面展示,去掉了项目创建功能,进去就直接可以进行产品开
发了省去了前面创建项目的y页面。 但是: 这并不影响使用。
看下图:
到了这一步,接着看文档的产品开发
章节继续就行了,大同小异。
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 我只是举例子。 你的按钮当初怎么配置的,就填什么命令。
在很多项目里,比如:水产养殖、智能鱼缸、智能饮水机等等项目里,都会用到电机、加热模块等等。 如果你的整个项目设备是采用USB线供电,整个设备模块的电源都从开发板上取电,这样是不行。 电机一转动,整个系统就会工作异常,比如: 温度读取不出来了,光敏读取也是错误。 特别是: 会导致ESP8266-WIFI断网,掉线,如果正在使用手机APP远程操作,微信小程序远程操作,电机一转动,你就发现无法控制了。
这个要怎么解决? 如果你的实物上确实需要接电机演示。
那么需要采用外部电源供电,买一个下面的 可调电源稳压模块 ,一个12V 、2A的电源插头就可以了。 买回来之后,将模块的电源都接在这个电源稳压模块上,将STM32开发板上的5V和GND分别用杜邦线接到稳压模块的5V和GND上即可。
采用外部电源供电,接好线之后的效果如下:
(1)稳压模块
(2)电源插头
之前很多项目里用到了电容触摸按键,原来的店铺里触摸按键升级了。原本项目代码无法使用。 新版的按键键盘驱动芯片换了,原来代码无法兼容。
看准这里。
比如: 以华为云物联网服务器为例。
如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。
ping 65b0f8a974.st1.iotda-device.cn-north-4.myhuaweicloud.com
得到下面的IP地址信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)
华为云的MQTT服务器地址:117.78.5.125
华为云的MQTT端口号:1883
华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打开这个工具,填入设备的信息(也就是创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。
这样填:
填入设备的信息: (上面两行就是设备创建完成之后保存得到的)
直接得到三元组信息。
得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。
ClientId 662a2c5971d845632a06f9fb_dev1_0_0_2024042510
Username 662a2c5971d845632a06f9fb_dev1
Password 5bcc5df45ce9e8bfe40c20408de495304a80bca79bf9e64e41f536b40723f177
如果你复刻的项目路用到了有人科技的4G模块
。
比如:
154 基于STM32的森林火灾监控系统设计
149 基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)
100 基于STM32+OneNet设计的物联网智慧路灯
这些项目就用到了有人科技的4G
模块。
一定要看下面图片的说明。
看下面,将接收4G模块里代码部分的printf
打印删除或者注释掉。 简单来说,就是 将下面图片里的全部printf
代码行删除或者注释掉。
链接:https://pan.baidu.com/s/1vYamLV9CPDbUF2wQMcbtPA?pwd=9ubq 提取码:9ubq –来自百度网盘超级会员V8的分享
自己也可以问树莓派的商家要镜像资料下载。
如果你的项目里使用的RC522模块刷卡没有反应。 (1)检查接线是否正确 (2)RC522模块要焊接排针,焊接之后才可以使用 (3)RC522供电必须接3.3V (4)使用的杜邦线检查是否有松动接触不良的情况。
如果以上检查了,你的刷卡模块还是无法正确刷卡。 那么,可以修改代码再测试下。 (防止可能不同版本的keil软件本身的优化机制,优化了 __nop();)
修改之后,再下载进去测试。
如果以上测试之后,发现RC522模块还是无法正常刷卡使用?
那么可能就是模块本身坏了。可以考虑更换模块再测试。
STM32+RFID-RC522模块刷卡效果
有好几个OneNet的项目是采用的SIM800C,通过SIM800C连接OneNet上传数据。
如果你接好了SIM800C,初始化也成功了,但是运行时,串口打印是发送数据失败,OneNet无法接收数据。
那么这个问题可能是SIM800C信号比较弱,连接服务器的时间太长,导致代码里原来的等待时间超时。 可以在以下的位置增加延时函数解决问题。
et 时间填大一点。 这个软件win11上无法生成正确的密码。在win10上运行,无法在win11运行。
如果你的项目用到了Qt上位机,一定要看下本小节的内容。
注意!注意! 你的Qt环境必须要是QT5.12.6 ,我的版本是QT5.12.6。 一定要安装这个版本。
QT5.12.6 的安装包网盘下载地址: 也就去Qt官网下载。 https://pan.quark.cn/s/f40557068445
Qt上位机源码如何打开?编译?运行?
(1)在你的项目源码路径下可以看到上位机源码工程。 (2)一定要将上位机源码目录拷贝到你电脑上纯英文路径(别放桌面)。最好在你D盘新建一个纯英文目录,将此源码拷贝过去。路径中一定不能有中文。 (3)如果你源码目录有一个后缀是.pro.user的文件,要先删除,再打开工程。 (4)如果你已经安装好了Qt环境,然后双击工程文件就可以打开项目。
如果你的Qt上位机项目用到OpenCV、ffmpeg等等第三方库。 打开工程之后,编译运行,程序会提示异常结束,无法正常运行。怎么办? 这个是因为,你Qt程序运行之后无法找到你的第三库的DLL文件,就无法正常运行。
最简单的操作,你将我的资料包《可执行程序》目录里全部文件(除了应用程序EXE文件可以不拷贝),拷贝到 你自己Qt编译生成的exe应用程序路径下即可。
如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程编译成功之后,在下面都会有提示的。 看下面的截图。
首先你观察,你的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工程编译成功之后,在下面都会有提示的。 看下面的截图。
Qt可以编译Android的APP,但是编译Android的APP需要自己搭建Android环境。
我提供了搭建环境的教程。在我的博客里,不过要花费29.9订阅Qt的技术文章专栏才可以看。这个文章在Qt的技术文章专栏里。 你也可以百度搜索教程自己搭建。
付费教程链接:https://blog.csdn.net/xiaolong1126626497/article/details/117254453
如果使用的是华为云的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.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】基于STM32设计的人体健康监护系统(Qt上位机源码包) https://download.csdn.net/download/xiaolong1126626497/88462877
【8】基于STM32的智能花盆系统设计与实现(Qt上位机源码包) https://download.csdn.net/download/xiaolong1126626497/88439627
【9】 基于STM32设计的小龙虾养殖系统【Qt上位机源码】 https://download.csdn.net/download/xiaolong1126626497/88917639
【10】106 基于STM32设计的城市绿化云端监控系统【Qt上位机源码】 https://download.csdn.net/download/xiaolong1126626497/88921525
【11】132 基于STM32设计的口罩识别和无线测温系统【Qt上位机源码】 https://download.csdn.net/download/xiaolong1126626497/88968240
【12】123 基于物联网的智能浇水系统(STM32+华为云IOT)-上位机源码.zip https://download.csdn.net/download/xiaolong1126626497/89165977
【13】105 基于STM32的汽车修理厂环境监测-Qt上位机源码.7z https://download.csdn.net/download/xiaolong1126626497/89221595
https://download.csdn.net/download/xiaolong1126626497/87853772