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程序设计,基本就完成了。
大家如果有什么想做的,或者有什么想法,都可以评论区留言告诉超子哦~~~ 想要程序的小伙伴,可以举手哦~~~盘点!新手学单片机九大误区,你进坑了吗?
同学们,新年好,我是华维单片机编程的导师,今天结合十年单片机开发经验给大家盘点下,新手学单片机的九大误区,你进坑了吗?
这篇文章可能有点多,但你一定要坚持看下去,作为过来人,我的经验不一定是最好,但一定有用!
1.去背寄存器
寄存器不用死记硬背,,当我们去使用单片机外设的时候就要去配置,千万别去记寄存器,华维单片机编程的导师做开发这么多年了,一个寄存器都记不住。
何况,单片机的寄存器非常多,你也不知道怎么使用,根本也记不住寄存器的用途。
单片机完成一个具体的功能涉及到哪些寄存器,都会有例子给出,有些单片机,生产厂家也会给出相关的子程序,你只需要调用就可以。
2.盲目学习C语言
C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生,高中生,中专生,大学生都能学会,如果真的要学习精通,学习指针,学习文件操作,对于新手来说,可以很负责的告诉你,难于上青天!但是关于单片机的基础你只要会如下就行。这边建议大家做下笔记!
5条指令语句switch语句,if else语句,while语句,for语句,=赋值语句。
7个运算符+,-,*,/,|,&,!。
4个逻辑关系符||,&&,!=,==.
3个数据类型unsigned char, unsigned int, unsigned long。
3个进制相互转化,二进制,十六进制,十进制。
1个void函数。
1个一维数组code(或const) unsigned char array[]。
等你把这些基础知识学完以后,几乎可以完成任何单片机程序的编写。根本就不要学去C语言的高级用法,即使你用C语言的最基础的语句能够完成程序的编写,底层运行的机制是学习重中之重!
等你积累自己编写一定的代码量以后,你再回过头去学习C语言的一些高级功能,你会觉得昔日你仰视的高峰不再。
3.不学51单片机直接学stm32
现在网上的普遍现象,有些自以为很牛逼的老鸟人建议直接越级学stm32单片机,很多人会学得很困难,理解上很有偏差,不排除有些人天赋异禀可以不必完全弄清楚硬件结构和原理。
站在老鸟的角度,觉得stm32很简单,站在新手的角度有多难和迷茫只有自己知道。但相信大多数都喜欢单片机,就会有学单片机就学stm32的错觉!
学习51单片机的目的,主要是培养直接调试寄存器与软硬件接口bug的能力,内部结构和寄存器数量及难度都是一个新手可以接受的范围,慢慢就认识了单片机
如果对这块基础的缺失会导致你后面在学习过程中,每学到一个知识点都是一脸懵逼,导致整体知识体系是畸形的!白白浪费时间,
比如说为什么这么配置?配置怎么改?改出问题,要怎么解决,你都会绕很多弯路,你以为自己直接学stm32是走了捷径,实际花的时间更长,最后可能还学不会!
4.盲目深挖模电、数电基础知识
针对性学习,把时间花在刀刃上,明明只需要熟悉欧姆定律就能点亮一个灯,你却非要把模电数电系统学一遍才舒服。
模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾了解所学过的模拟电路和数字电路知识。
5.盲目学习通讯协议
做单片机开发会经常接触各种协议,各种通讯协议看起来也是眼花缭乱,不知道从何下手,但是总体来说也就是:IIC、SPI、USART、单口通讯。
其实这个网上都有标准的模块程序,也可以按照规格书自己写自己的模块程序,写好一个之后,以后都可以调用。
6.忽视实践,纸上谈兵
很多单片机的学员往往会认为应该将买回来的单片机书籍全部看一遍,其实没必要,这是一个不科学的学习方法。如果我们要把这些书籍看一遍的话,时间就是金钱,怕是一本书还未看完,前面看的内容就忘的一干二净了吧 。
依我之见,你还不如直接动手买一个开发板学习,感受即时的反馈感,你就会越学越起劲,然后废寝忘食,沉浸在单片机的世界里,无法自拔!
7.在汇编语言时间花得太多
在单片机开发用途中,一般用在局部代码的汇编优化,比如说单片机启动代码,初始化堆栈,解决产品成本和性能的问题,一般是对实时性要求很高的产品,
我的建议是,作为初学者了解即可,大概知道有这个知识,遇到问题直接百度一下你就知道了。多把时间花在实践中,特别是焊接能力这块,犹为重要。
8.追求短小精悍的程序
新手不要纠结于此,做项目开发,程序容量不是刻意追求的目标,程序多一点少一点没关系,现在大容量的单片机品种非常多,容量不会是寸土寸金的事情,我们更加要关注程序的运行效率,可读性和可修改性。
9.不重视项目学习,盲目学习知识
学习单片机的最终目的是做产品开发,软件和硬件相结合形成完整的控制系统。
要动手去做项目,项目锻炼水平和思维,很多人想单片机“全部”学完 ,结果,发现项目依旧无从入手。
想正确学习单片机的小伙伴,可以看我往期文章学习从单片机入门到高级进阶教程,或者长按文章底部二维码领取资料。
相关问答
单片机 的一个程序题求解设变量x以补码的形式存放在片内RAM的...[最佳回答]x大于20H时,y=x。x小于20H时,y=x+5。-------x等于20H时,y=????
怎么用图表解释云计算、大数据、物联网、人工智能的关系?物联网是由无数的终端节点组成的网络物联网可用下图抽象而简单地描述1、终端节点网络可抽象为传感器网络和执行网络2、传感器网络是物联网应用中的终端节点产...