# esp8266_iot_bin
**Repository Path**: caisiyu/esp8266_iot_bin
## Basic Information
- **Project Name**: esp8266_iot_bin
- **Description**: 使esp8266包含tcp、mqtt、等物联网协议
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 4
- **Created**: 2021-08-23
- **Last Updated**: 2024-06-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: esp8266, 物联网协议, TCP, mqtt, Http
## README
# 介绍
本固件将**HTTP、TCP、UDP、MQTT**这四种物联网协议集成在**esp8266**模块上,并提供了配置接口API,可以任意选择不同的协议和远程服务器通信,使esp8266模块充当远程服务器与MCU数据交换的桥梁,省去MCU使用AT指令去配置esp8266的步骤。
**MCU**通过串口和**esp8266**模块通信,**MCU**只需把协议名称、远程服务器的IP地址,端口、发送的信息封装成一个数据包,通过串口发送给**esp8266**模块,**esp8266**模块将数据包解析完成后,将自动上报数据。当esp8266模块收到远程服务器的信息时,便将数据反馈给MCU。
这样就可以实现MCU向远程服务器上报数据,以及远程服务器下发数据给MCU的过程!
------
# 烧写固件
> **工具:FLASH_DOWNLOAD_TOOLS_V3.6.4**
>
> **固件:WiFiClient.ino.nodemcu.bin**
------
## 工具下载
> FLASH_DOWNLOAD_TOOLS_V3.6.4
下载链接:https://www.espressif.com/sites/default/files/tools/flash_download_tool_v3.8.8.zip
主界面:

每一项的配置说明:

ESP8266型号图:


------
## 1. ESP8266-12E、12F、12S型号
(1) 打开FLASH_DOWNLOAD_TOOLS_V3.6.4

(2)选择型号为ESP8266,develop版

(3)依次选中配置项 。**Note: 波特率可以调到一点 ,无所谓**
烧写位置:0x00000000
(4) 开始烧写
> 1. esp8266 EN与VCC接3.3V且保证供电充足,最好独立供电,但要与usbttl共地
>
> 2. GPIO0要接GND才可以进入烧写模式
>
> 3. 选择好文件路径与烧写位置以后,配置好各项参数,先清除flash即点击ERASE按钮,此时会显示“正在等待上电重启”,此时将ESP01模组的VCC拔掉再插上即可进入擦除状态。
>
> 4. 擦除成功以后,点击START按钮进入烧写模式,重复上一步中的—-此时会显示“正在等待上电重启”,此时将ESP01模组的VCC拔掉再插上即可进入烧写状态。
>
> 5. 等进入条完成,拔掉GPIO0的GND线,令其悬空即可进入工作模式。
(5)下载结束 , 复位一下 8266模块
------
## 2. ESP-01、ESP-01S型号
配置项Flash size 选择8Mbit,其余步骤同上:
------
# 固件使用
**模块上电后: 首先开始配网操作;配网完成后,接着连接服务器;服务器连接后,可以进行数据传输。**
**自动掉线重连功能:1. wifi网络断开,开始重连; 2. 服务器掉线,开始重连**
## **LED指示灯功能**
> 500ms闪烁 -- 模块通过eeprom中读到的WiFi信息,连接网络
>
> 100ms闪烁 -- 模块正在等待微信配网
>
> 1000ms闪烁 -- 模块已经完成配网,正在等待连接服务器
>
> 2000ms闪烁 -- 模块已经连接到远程服务器,连接没有问题
## 微信配网
**Notes:**
1. wifi必须为2.4GHz的频道,如果是5GHz,配置会没反应。
2. 测试时,wifi为路由器的网络。如果是手机或电脑开的移动热点,有时可能出现没有反应的问题。
模组配网时,首先从eeprom中读到的WiFi信息,如果这个信息不能正确连接到网络,10s后模块会自动进入微信配网模式,LED灯快闪!
| 找到公众号:安信可科技 | 开始配置 | 输入WIFI密码,点击连接 |
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
|
|
等待几秒后,即可。
## MQTT协议配置指令
> 订阅主题:
>
> {"type":"mqtt","url":"www.caisiyu.top","port":"1883","m_type":"0","topic":"/hum","id":"esp","name":"caisiyu","pwd":"123"}
>
> 发布主题:
>
> {"type":"mqtt","url":"www.caisiyu.top","port":"1883","m_type":"1","topic":"/hum","msg":"25","id":"esp","name":"caisiyu","pwd":"123"}
| 键名 | 键值 | 说明 |
| ------ | --------------- | ------------------------------- |
| type | mqtt | 协议名称 |
| url | www.caisiyu.top | 服务器地址 |
| port | 1883 | 端口 |
| m_type | 0 | 0:表示订阅主题、1:表示发布主题 |
| topic | /hum | 主题名称 |
| msg | 25 | 数据包内容 |
| id | esp | 客户端名称 |
| name | caisiyu | 用户名 |
| pwd | 123 | 密码 |
1. 指令发送完成后,如果参数正确,模组返回
> Ok
2. 如果参数不正确,模组返回
> error-parameter
3. 当收到消息后,会收到
> receive
>
> <>中包含着消息体
>
> /hum-25 : **/hum是收到的主题名**,**25为消息**
## HTTP协议配置指令
### POST方式
> {"type":"post","url":"www.caisiyu.top:1880","page":"postplain","msg":"{\"msg\":\"hello\"}"}
| 键名 | 键值 | 说明 |
| ---- | -------------------- | ---------- |
| type | post | 协议名称 |
| url | www.caisiyu.top:1880 | 服务器地址 |
| page | postplain | 资源路径 |
| msg | {\"msg\":\"hello\"} | 数据包内容 |
1. 指令发出后,模组返回Ok
> Ok
2. 当收到消息后,会收到
> receive< {"caiiyu":"post"} >
>
> <>中包含着消息体
>
> **"caiiyu":"post" ,为收到的数据**
### GET方式
> {"type":"get","url":"www.caisiyu.top:1880","page":"postplain"}
| 键名 | 键值 | 说明 |
| ---- | -------------------- | ---------- |
| type | get | 协议名称 |
| url | www.caisiyu.top:1880 | 服务器地址 |
| page | postplain | 资源路径 |
1. 指令发出后,模组返回Ok
> Ok
2. 当收到消息后,会收到
> receive< {"caiiyu":"get"} >
>
> <>中包含着消息体
>
> **"caiiyu":"get" ,为收到的数据**
## TCP协议配置指令
> {"type":"tcp","ip":"192.168.31.145","port":"12345","msg":" {\"msg\":\"hello\"}"}
| 键名 | 键值 | 说明 |
| ---- | ------------------- | ---------------- |
| type | tcp | 协议名称 |
| ip | 192.168.31.145 | 服务器IP地址 |
| port | 12345 | 服务器IP地址端口 |
| msg | {\"msg\":\"hello\"} | 数据包内容 |
1. 指令发送完成后,正常连接服务器后,模组返回
> Ok
2. 如果参数不正确,模组返回
> error-parameter
3. 当收到消息后,会收到
> receive
>
> <>中包含着消息体
## UDP协议配置指令
> {"type":"udp","ip":"255.255.255.255","l_port":"12346","r_port":"12345","msg":"caisiyu"}
| 键名 | 键值 | 说明 |
| ------ | ------------------- | ------------ |
| type | udp | 协议名称 |
| ip | 255.255.255.255 | ip地址 |
| l_port | 12346 | 设置本地端口 |
| r_port | 12345 | 设置远程端口 |
| msg | {\"msg\":\"hello\"} | 数据包内容 |
1. 指令发送完成后,模组返回
> Ok
## 查询设备状态
> {"query":""}
| 键名 | 键值 | 说明 |
| ----- | ---- | ---- |
| query | "" | 空 |
> \#define NO_Connect_Wifi 0 没有连接wifi -status<0>
>
> \#define Connected_Wifi 1 连接wifi -status<1>
>
> \#define NO_Connect_Server 2 未连接服务器 -status<2>
>
> \#define Connected_Server 3 连接到服务器 -status<3>
1. 如果模组已经连接服务器,指令发送完成后,模组返回
> status<3>
## 设置密钥
> {"key":"qisc8rr0dz"}
| 键名 | 键值 | 说明 |
| ---- | ---------- | ---- |
| key | qisc8rr0dz | 密钥 |
1. 如果密钥正确,指令发送完成后,模组返回
> Ok
2. 如果秘钥不正确,模组会返回:
> error-secret
