准备东西:
一块单片机开发板(我用的原子的stm32的mini板子)
一块esp-12F(esp-12E,esp-12S均可)
一台云主机(没有也可以用虚拟机来玩局域网控制)
单片机只需要消耗一个串口和一个定时器

先搭建环境
硬件连接服务器一般是socket,tcp,udp,mqtt,websocket之类的
物联网里用得较多的是mqtt,这里我用的是mqtt,服务器端我用的emq,一个mqtt的server端
tcp和udp缺点就不说了,看到很多esp群里怕丢包一个数据发十几次的都有
而mqtt可以说是改良的tcp,mqtt基于主题和消息内容来通讯,客户端订阅主题,有人推送一个主题,只有订阅了这个主题的人才能收到消息
ssh软件连接自己的云主机进入交互式shell界面(怎么连云主机自己摸索)
我的主机是64位centos6.9,ssh软件我用的xshell(xshell老版本被曝被人恶意植入后门,已经安装过的赶紧升级吧)

上图下面linux里命令我直接复制,图里的cat /etc/issue就是命令,那个绿色[root@localhost ~]#的是PS1,俩PS1之间夹的就是命令输出,PS1右侧就是命令,接下来我直接复制命令
---安装基本命令
[root@localhost ~]# yum install -y unzip wget &>/dev/null
---下载emq压缩包并以名字保存(-O选项后面接存为啥名字)
[root@localhost ~]# wget http://emqtt.com/downloads/2070/centos6 -O emqttd-centos6.8-v2.2.0.zip
这里我下的不是最新版本,原因后面讲
---解压压缩包
[root@localhost ~]# unzip emqttd-centos6.8-v2.2.0.zip
---启动emq
[root@localhost ~]# emqttd/bin/emqttd start
emqttd 2.0.7 is started successfully!
---打开浏览器界面输入你的ip:18083
!!进不去的话看看防火墙加了规则没,没加就加上,不过现在云主机都是安全组规则来控制,云主机的防火墙可以不用开,一般去登陆云主机供应商的网站的控制面板那里改下安全组的规则加端口号允许就行了,用到的端口有18083 8083 8084 1883

进去web后台会有登陆的窗口,默认用户名是admin密码public
登陆进去自行改密码
然后再plugins插件里把这个emq_auth_username给开启了,不然任何人使用mqtt协议都能连接你的server端

---然后在emq里增加用户名为test密码为test123456 (随意填写你开心就好)
[root@guan ~]# emqttd/bin/emqttd_ctl users add test test123
ok
然后进web后台的websocket(网页的mqtt客户端,方便调试啥的)输入你添加的用户名和密码点击connect
然后下面的subscribe订阅输入一个主题消息名字点击subscribe

图里我输入的是hello

emq的官方文档里写着推送消息有http接口
在服务器上我们测试下推送一个hello主题,消息内容是ON的消息
[root@localhost ~]# curl -v --basic -u test:test123456 -d "qos=2&retain=0&topic=hello&message=ON" -k http://localhost:8083/mqtt/publish
(输出信息省略)

后台面板可以看到收到了一条消息为ON的
可以看到环境OK
---写个shell来接收主题名字和消息内容方便不用每次来输入一大串的curl
[root@localhost ~]# cat>/usr/bin/publish<<'EOF'
#/bin/bash
curl --basic -u test:test123456 -d 'qos=2&retain=0&topic='"$1"'&message='"$2" -k http://localhost:8083/mqtt/publish
EOF
---改下这个命令的权限
[root@localhost ~]# chmod 755 /usr/bin/publish
测试下看看能不能用

目前服务器端弄好了暂时

然后是硬件esp-8266,我用的是esp-12系列,10块包邮岂不美哉?

买的时候建议买个转接板方便接线
固件的源码工程我放在了github
https://github.com/zhangguanzhang/ESP8266_NONOS_SDK-mqtt-uart_set
求给个星星阿
从乐鑫官方的non_os的mqtt的demo修改,我用的是esp-12系列,12F和12S测试了都可以用
官方的自带的demo好像串口编译不通过,改了一些引用文件和增加了几个定义就能过了
具体信息可看github里的readme.md
下面是开发软件sdk链接,需要自己改的可以下载后导入我的工程来修改
链接:http://pan.baidu.com/s/1eSIIAdG 密码:vy55
---烧录固件
ESP8266_NONOS_SDK-mqtt-uart_set/bin/里的就是固件
下面是文件名对应的烧写地址
eagle.flash.bin——–>0x00000
eagle.irom0text.bin—->0x10000
上面俩文件是任何时候都必须烧录的,下面俩文件是刚拿到模块初始化必须烧录的
esp_init_data_default.bin—->0x3fc000
blank.bin—->0x3ff000
烧写软件链接:http://pan.baidu.com/s/1c1DgTwO 密码:z2dk
烧写的时候自己用串口电路或者usb转串口模块下载,我是直接接在原子mini板子上的串口电路下载的,GPIO0要拉低,然后点击start后reset引脚触碰下gnd就进入下载了

接线是VCC,GND,RX,TX 另外俩根是一个GND-GPIO0,那根杜邦针式接GND上的
点击了start后杜邦针触碰下reset就下载了
下载过程图如图所示

下载完后拔掉GPIO0的线,然后触碰下reset给个低电平重启下就行了,不拔掉GPIO的线的话不会进入工作模式并且会乱码
然后打开串口调试软件参数如图所示
初始的一些mqtt参数在app/include/mqtt_config.h里宏定义的

我改写了官方固件,通过串口即可设置参数,具体设置协议在我github的readme下拉就能看到
先设置wifi和mqtt的用户名密码和hid和你mqtt的server端的ip和端口,主机有域名也可以直接用域名,wifi名字不能是中文

设置好后发下show看看信息,无误后发送restart重启加载信息

上面的是连接不上的打印,我才意识到我手机开的wifi热点后我手机没打开数据流量,连接上了就是红框部分的下面
然后源码里默认订阅的主题是receive,推送主题名字是send,服务器上推送下一个ON的信息,
打印部份我的代码是判断云端的id部分是不是和自身一样,一样就打印,模块硬件id我设置成testid的上图可以看到
str_cut是我自定的函数,在uart.c里根据传入字符来分割字符串
也就是按照等号分割出第二部分的id写进temp后判断和自身id一致不,不一致就不打印,一致就打印信息

由此可见硬件可以和服务器通信了
--------------------------------------------------------------------------
8266是一款由wifi能力的mcu,有兴趣和时间的可以自己去研究sdk开发,不过我是只把它当作wifi传送数据的
有串口的单片机拿个串口接8266的串口上就可以传输了
处理云端的数据思路是以下这样: 举例 1假如连接不上wifi就是STATION_IDLE多次串口打印 2心跳包(Send keepalive packet to字样)的打印 所有动作和状态都会从串口输出,内容里包含多个回车换行符,所以建议串口中断不要以回车换行判定接收完成 建议开启一个定时器 串口中断里使能定时器并且接受每一个字节的时候定时器数值清零,溢出了直接标记flag标志位为接收完成并失能定时器,听不懂我这段话的话看下面图 参考原子的代码

然后是单片机部分的源码工程分享,写的很渣,就这样*大的拿去扩展吧
链接:http://pan.baidu.com/s/1bppj7aB 密码:wkz2
--------------------------------------------------------------------
顺带这样暂时处理的只是下发,写的那个publish可以用php调用外部命令来推送
服务器可以接入微信后根据消息type和正则匹配来推送消息给硬件就是微信控制硬件了
也可以自己写个页面然后ajax按钮发送调用那个publish推送就是网页控制硬件了
-------------------------------------------------------------------
发下自己之前录制的视频
链接:http://pan.baidu.com/s/1slFf4rr 密码:ebfy

这样只是下发,如果你的硬件要上传的话,可以在服务器上跑一个客户端来订阅硬件端推送的send主题来把消息写到数据库里,至于消息格式啥的我是纯字符串上传的
然后客户端我用的是mosquitto-1.4.5
字符串处理入库我用的是shell,估吧里没多少人看得懂我瞎写的,当初写的,等号分割每一部分,相当于自定义了个通信协议,代码里就是解析字符串后写入数据库

diao大的可以用其他语言来直接写个客户端处理或者erlang开发emq的插件
个人思路就是以上的,有疑问欢迎探讨
另外不用最新版的emq是发现开了那个username的插件后就连不上去了不知道怎么回事,还有官方的http接口看文档居然也推送不了,能解决的大佬可以分享下经验

ESP8266 MQTT相关推荐

  1. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云 1.概述 2.实现步骤 2.1.MQTT.fx模拟器与阿里云通信 2.2.STM32与阿里云通信 3. 搭建云平台 3 ...

  2. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台

    STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台   Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...

  3. Arduino ESP8266 MQTT 阿里 腾讯 连接示例

    Arduino ESP8266 MQTT 阿里 腾讯 连接示例 ESP8266基于Arduino IDE 快速搭建IoT还是很方便的,降低了很多门槛.官方的示例丰富的话,中小学生都能搞物联网了.真希望 ...

  4. Esp8266 mqtt无线控制空调

    对于空调的控制 一般都是红外控制.这样我们就可以将esp模块和红外模块联合使用 这样来对空调进行远程的无线的控制 演示视频:链接 红外接收 使用的是引脚11 使用波特率是9600 调用的IRremot ...

  5. Esp8266 mqtt 步进电机远程控制窗帘

    使用 28BYJ-48步进电机 esp8266-12f(或nodemcu) mqtt 基于arduino IDE开发实现 通过mqtt发送指令给wifi模块进而控制电机,电机拖动窗帘打开或闭合 效果演 ...

  6. esp8266 mqtt 使用arduino开发教程

    esp8266的开发可以使用arduino的IDE进行开发,或者使用SDK开发 使用arduino的IDE开发是最简单的. 使用arduino的IDE开发,又可以分为直接在模块上开发或者通过ardui ...

  7. STM32+ESP8266+MQTT连接阿里云服务器(一、烧写MQTT固件)

    用STM32连接阿里云服务器首先ESP8266得支持MQTT的AT指令,所以!!!在连接阿里云服务器时,得先对ESP8266进行固件替换. 工具 硬件:ATK-ESP8266.USB转串口 软件:fl ...

  8. 【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节

    首先要吐槽一点,那就是网络上的这方面资料杂七杂八,而且很多都是一模一样的: 然后我作为一个学生,没有多大的本事,就是想实现最基本的功能,然后在此基础上慢慢拓展.所以那些十分庞大的工程或者一些IoT物联 ...

  9. 学习太极创客 — MQTT 第二章(七)ESP8266 MQTT 遗嘱应用

    视频链接:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/esp8266-la ...

  10. STM32+ESP8266+MQTT协议连接腾讯物联网开发平台

    一.环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可.比如:GSM模块.有线网卡等. 开发软件:keil5 物联网平台: ...

最新文章

  1. iOS Apps核心对象
  2. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...
  3. 计算机应用杂志投稿,计算机类杂志 (可网上投稿)
  4. nginx访问量统计
  5. 五分钟快速过完Verilog HDL基本概念(1)
  6. [BZOJ 5074]小B的数字
  7. 热点:安全问题是否能将DNS推入云服务
  8. Windows实现微信多开+美化图标
  9. 200与mcgs485实例 smart_SMAART200与MCGS-工业支持中心-西门子中国
  10. ARINC 429总线学习资料?
  11. 摸索Detours 1:使用Vs2019 编译Detours
  12. win10无法防问其他计算机没有权限,win10系统访问磁盘共享没有权限的解决方案...
  13. 【读书总结】 《你只是看起来很努力》——致那段应该奋斗的岁月
  14. MPI并行编程: 矩阵乘法,积分计算,PSPR排序
  15. **matlab中fprintf函数简单用法**
  16. webstorm 激活破解方法
  17. android notify() notifyAll()的区别
  18. python条件运算符_Python中的条件运算符
  19. 联想V450 如何支持VT技术
  20. 用 Python 来理一理红楼梦里的那些关系

热门文章

  1. 手机应用宝占用了8G
  2. 一个简单的获取时间的程序
  3. MySQL免安装版 图文教程【5.7版本,纯净版win7安装】
  4. php 用户之间通信,PHP,javascript,ajax-2位用户之间的通信
  5. 实验室计算机系统权限管理规程,计算机辅助建筑设计实验室使用规范(试行)...
  6. 正确的python变量名_Python变量的命名
  7. java发送qq邮件_「java发邮件」Java 通过SMTP实现发送QQ邮件 - seo实验室
  8. 覆盖率测试工具gcov的前端工具_LCOV_简介
  9. 关于文本框字数的限制以及动态显示剩余字数
  10. Javascript 高级程序设计笔记 (cha5 引用类型)