51单片机 ESP8266模块 APP控制继电器,物联网DIY入门新手指南
题目
大家好,超子能力有限,技术不高,有什么错误的地方,欢迎批评指正。超子之前写过一篇STM32单片机配合ESP8266的WiFi模块接入阿里云生活物联网平台的DIY实验,有小伙伴问我51单片机能不能实现,答案是能。那么今天超子就给大家介绍下51单片机的实现方法。
程序设计中,我们使用的软件是Keil集成开发环境,C语言编写。如果大家想要程序源码的话,可以私信我,超子不是专业的程序员,水平不高,大家不嫌弃就行。
一说到51单片机的型号那就太多了,因为我们要使用MQTT协议对接阿里云生活物联网平台,所以对RAM空间要求比较多,一些常见的型号比如89C51,89C52,因为RAM空间太少不能用,所以我们本次DIY程序设计使用的单片机型号是STC12LE5A60S2。
ESP8266模块是通过串口AT指令控制的那种,网上有很多,价格也比较便宜,非常适合我们做DIY。
虽然我们前面使用STM32单片机做了第一个DIY设计,但是考虑到有些小伙伴,没有看过,所以超子还是说的详细一点,把每一个步骤再重新走一遍。
图1
首先进入我们自己的阿里云生活物联网平台,然后创建项目,我们就创建一个51单片机DIY项目吧,以后所有51单片机相关的DIY设计,我们都加入到这个项目内。
图2
项目建立完毕后,可以在项目列表中,看到51单片机DIY项目,旁边的第一个DIY设计项目,是上次STM32单片机DIY设计时建立的。然后我们点击51单片机DIY项目,进入项目管理界面。
图3
接下来,我们需要创建新产品。
图4
产品名称就叫51单片机插座,大家也可以起自己喜欢的名字。然后所属品类选择电工照明下的插座。节点类型选择设备,不接入网关,因为ESP8266可以连接WiFi路由器,直接具备接云的能力,所以是直连设备,不需要网关。连网方式一定要注意,虽然ESP8266是WiFi模块,但是不能选择WiFi连网,因为我们使用的是通用的,AT指令控制的ESP8266,没有在阿里云生活物联网平台认证,不兼容阿里云生活物联网平台APP的配网协议,如果我们选择WiFi方式的话,配网过不去,程序设计就无法进行了。所以我们取个巧,使用蜂窝连接方式,跳过阿里云生活物联网平台APP的配网,我们可以用ESP8266模块自己的APP配网或是直接把WiFi的SSID以及密码写在程序里。然后数据格式选择JSON,不适用ID2认证,最后点击完成就行了。
图5
产品建立完成后,我们要先进行第1步的功能定义的设置,我们选择的是电工照明分类下的插座,所以阿里云生活物联网平台自动帮我们添加了电源开关的功能属性。所以这一步我们不需要做什么额外的设置,直接点击下一步:设备调试。
图6
我们新建设备的时候,为了跳过配网协议,所以故意选择了蜂窝的连接方式,所以我们随便选一个通过认证的模组就行,选哪个型号都不会影响我们的DIY设计。
图7
选好模组后,我们点击新增测试设备,每个产品下可以添加最多50个免费的测试设备,我们做DIY程序设计,50个足够我们用了。
图8
新增测试设备时,我们要输入设备名称,就叫D001吧,超子喜欢用这种编号命名设备,大家可以根据喜好自己设置设备名称,然后点击确定就行。
图9
然后会弹出激活凭证,也就是三元组信息,这个是登录阿里云生活物联网平台的认证信息,稍后我们修改51单片机C语言程序时要用到这些重要信息。然后我们点击下一步:人机交互。
图10
和使用STM32单片机做DIY设计时一样,我们使用阿里云生活物联网平台的公版APP,也就是云智能APP。我们打开上图中红圈所示的开关。
图11
然后我们点击未设置,选择一个界面。
图12
自己喜欢哪个,选一个就行,然后点击确认。
图13
然后页面下方,我们要配置APP功能,同STM32单片机DIY时一样,我们主要设置多语言管理,填写品牌名称,设备名称,产品编号等等,大家根据喜好自己填一个就。最下方我们看到了天猫精灵,插座是天猫精灵支持的品类,所以可以直接绑定天猫精灵的账号,用天猫精灵控制开关,非常方便。然后我们点击下一步:批量投产。
图14
我们勾选上充分了解的对勾,然后点击开发完成,到此我们整个项目的配置就算完成了,就下来我们要修改51单片机的程序了。
图15
首先看esp8266.c源文件,wifi_mode变量用于设置使用哪种方式进行配网,大家根据注释自行选择就行,如果选择0的话,SSID和密码要在esp8266.h头文件中设置。
图16
然后我们需要修改mqtt.h头文件中的6个字符串,最麻烦的就是第3个,也就是MQTT协议中CONNECT报文中的包含的密码信息。我们一个一个来,讲一下怎么修改。
我们先看第6个需要修改的字符串,服务器的域名,格式如下所示:
*.iot-as-mqtt.cn-shanghai.aliyuncs.com
我们把*号替换成我们自己设备的ProductKey,这个ProductKey就是我们新建设备时弹出的3元组信息,图9所示,以我新建的设备作为例子,我们修改一下,最终结果如下:
a1jWDQfzbVB.iot-as-mqtt.cn-shanghai.aliyuncs.com
然后看第4和第5个字符串, 都是Topic主题,第4个set是用来接收控制开关命令推送的Topic,我们需要订阅它,第5个post是用来往服务器上传数据的,这次的实验post不是关键点。那么这两个Topic再那找呢?看下图。
图17
测试设备点击红圈圈中的查看。
图18
然后在Topic列表下,可以看到post和set,根据自己设备的实际内容,修改程序中第4和第5个字符串即可。
接下来看第1个字符串,也就是MQTT协议中CONNECT报文中包含的客户端ID信息,格式如下:
*|securemode=3,signmethod=hmacsha1|
其中*号是设备名称,以我的设备为例,修改一下,结果如下:
D001|securemode=3,signmethod=hmacsha1|
然后再看第2个字符串,也就是MQTT协议中CONNECT报文中包含的用户名信息,格式如下:
*
其中*号是设备名称 ,#号是ProductKey,都是图9中的三元组信息,就以我的设备为例,修改一下,结果如下:
D001&a1jWDQfzbVB
最后再看最麻烦的第3个字符串,也就是MQTT协议中CONNECT报文中包含的密码信息,需要经过一步加密,我们先要构建待加密的明文字符串,格式如下:
clientId*deviceName*productKey#
其中*号是设备名称 ,#号是ProductKey,以我的设备为例,修改一下,结果如下:
clientIdD001deviceNameD001productKey a1jWDQfzbVB
加密用的秘钥是图9中,三元组信息里的DeviceSecret,我们网上找一个加密算法的网站。
图19
我们复制待加密的字符串和密钥的时候,一定要多检查,不要多空格,不要多回车,错一点加密后的结果都不会正确的,所以大家一定要小心。加密后的结果就是第3个字符串的内容,到此6个需要修改的字符串我们都修改完毕了,重新编译程序,下载到开发板就行了。然后我们再回到阿里云生活物联网平台。
图20
我们进入第3步,人机交互设置页面,我们点击红圈所示的内容,然后弹出页面,需要我们填写设备名称,以我的为例,填上D001,然后就可以生成我们需要的,添加设备的二维码,因为文章中不能出现二维码,所以超子就不展示了。到此我们本次51单片机的DIY程序设计,基本就完成了。
想要程序的小伙伴,可以举手哦~~~
【51单片机】模块化编程的一般步骤和基础说明
51 单片机的模块化编程是将程序按照功能划分为不同的模块,每个模块具有相对独立的功能,分别放在不同的 .c 文件和 .h 文件中。
以下是进行 51 单片机模块化编程的一般步骤和基础说明:
1. 模块划分:确定程序中的各个功能模块,例如延时函数、数码管显示函数、LCD 显示函数等。每个模块应具有明确的功能和相对独立的代码。
2. 创建 .c 文件**:为每个模块创建一个对应的 .c 文件,用于实现该模块的具体功能。在 .c 文件中编写函数的定义和相关代码。
3. 创建 .h 文件(头文件)**:为每个 .c 文件创建一个同名的 .h 文件。头文件用于声明模块中可供外部调用的函数、变量等。头文件的内容通常使用预处理指令 #ifndef 、 #define 和 #endif 来防止重复包含,例如:
#ifndef __MODULE_H__
#define __MODULE_H__
// 函数声明、变量声明等
#endif
4. 在 .c 文件中实现功能**:在对应的 .c 文件中具体实现模块的功能,编写函数的代码逻辑。
5. 在头文件中声明函数和变量**:在 .h 文件中声明在 .c 文件中定义的函数、全局变量等,以便其他文件可以使用这些函数和变量。例如:
void function1(void);
int variable1;
6. 在主程序或其他需要使用该模块的文件中包含头文件**:使用 #include "module.h" 语句将所需模块的头文件包含到主程序或其他 .c 文件中,这样就可以调用头文件中声明的函数和使用相关变量。
7. 调用模块功能**:在主程序或其他模块中,根据需要调用相应模块的函数来实现具体功能。
通过模块化编程,可以提高代码的可读性、可维护性和可移植性。各个模块可以独立开发、测试和修改,而不会影响其他部分的代码。同时,也方便多人协作开发,以及在不同项目中复用已有的模块。
例如,假设有一个数码管显示模块,包含数码管显示函数和相关的段码表。以下是示例代码:
数码管显示的 .c 文件( nixie.c ):
#include
#include "delay.h" // 包含延时函数的头文件,因为要使用其中的延时功能
// 数码管段码表
unsigned char NixieTable() = {
0x3F, 0x06, 0x5B, 0x4F,
0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F
};
// 数码管显示子函数
void Nixie(unsigned char Location, Number) {
switch (Location) // 位码输出
{
case 1:
P2_4 = 1;
P2_3 = 1;
P2_2 = 1;
break;
case 2:
P2_4 = 1;
P2_3 = 1;
P2_2 = 0;
break;
// 省略其他 case 情况
}
P0 = NixieTable(Number); // 段码输出
delay(1); // 显示一段时间
P0 = 0x00; // 段码清 0,消影
}
数码管显示的 .h 文件( nixie.h ):
#ifndef __NIXIE_H__
#define __NIXIE_H__
void Nixie(unsigned char Location, Number);
#endif
在主程序( main.c )中使用该数码管显示模块时,只需包含 nixie.h 头文件,然后就可以调用 Nixie 函数来显示数字:
#include
#include "nixie.h" // 包含数码管显示模块的头文件
void main() {
while (1) {
Nixie(1, 6); // 在数码管的第 1 位置显示 6
}
}
这样,通过模块化编程,将数码管显示的功能封装在一个模块中,使得主程序更加简洁清晰,易于理解和维护。如果需要修改数码管显示的相关代码,只需在 nixie.c 和 nixie.h 中进行修改,而不会影响到主程序的其他部分。同时,在其他项目中如果也需要使用数码管显示功能,只需将这两个文件添
相关问答
如何从 51单片机 向蓝牙 模块 发送AT指令? - 懂得51单片机和蓝牙连接是通过串口实现的,所以通过单片机想蓝牙模块发送AT指令,也必须通过串口来发送,安装蓝牙模块的协议来发送控制命令就可以了。接收...
51单片机 小系统板成品可以做什么?51单片机小系统板成品是一款精简、高效的微控制器,可以用于各种嵌入式系统的开发,如温度监测、智能家居、智能车、电子钟表等。它具备大量的输入输出接口,包...
谁能介绍下几种 单片机 产品的应用实例?你的问题也太笼统了,单片机无论什么型号,都是起控制功能的作用,像人的大脑一样。通过搭接不同的功能外设构成不同的产品。单片机应用很广泛,生活中处处可见...
51单片机 ad 模块 接法?51单片机AD模块接法是指将外部输入信号通过模块转换为数字信号,再由单片机处理的一种方式。具体接法如下:1.将AD转换模块的输入端线连接到外部模拟信号的输...
51单片机 有独立的ad转换 模块 吗?有的型号有,有的型号没有!因为51单片机是一种比较经典的单片机,因此问世时间比avr时间长,它的芯片内部没有集成ad转换,而avr单片机芯片内部集成了ad转换,因...
新手用 51单片机 做什么好呢?我认为作为新手用51单片机最好用PCB万能板焊接一个单片机实验板,一来这样能够提高自己的动手能力;二来可以锻炼自己的编程调试能力。同时我们在焊接时还要设计...
51 八位 单片机开发 板怎么做?1.通过购买相应的材料和器件,以及编程软件,可以制作出51八位单片机开发板。2.首先,需要准备好51单片机芯片、电路板、电阻、电容、晶振等器件,以及USB转串...
51单片机 带几个ad?51单片机现内部本身就含有AD模块了,一般有几路到几十路不等,要求精度高时才采用专业芯片。51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单...
51单片机 没有系统 怎么运行?没有系统就没有办法运行。KeilC51是一款51单片机的开发工具,要运行该工具需要先安装该软件,并连接好相应的单片机开发板。连接好硬件之后,在KeilC51中新建...
51单片机 LED 模块 电阻作用?1.一般51单片机的P0口在作为地址/数据复用时不接上拉电阻。2.作为一般的I/O口时用时,由于内部没有上拉电阻,故要接上上拉电阻!!3.当p0口用来驱动PNP管子的时...