tcp/ip协议划分为4层

 从底层向上介绍

1.链路层    实现设备之间的物理联系   esp8266  利用wifi联网时有三种工作模式   sta ap  sta/ap

2.网络层 设备可以通过链路层联网  但是无法实现设备间的数据通讯,因为网络设备没有明确的表示,           通过ip协议为联网设备提供ip地址      192.168.0.2                                                                  子网掩码   与网络设备相同,网络本身也有自己的地址   如192.168.0.2中192.168.0就是子网地址   为了解决ip地址中那部分是子网地址    就需要子网掩码   255 . 255 . 255 . 0

 mac地址  网络设备要想实现通讯,设备之间不光要知道彼此的ip地址,还要知道mac地址

网络中的每个设备都有一个独立的mac地址

这种让两台完全不认识彼此的设备获取到对方IP和MAC地址的协议就是ARP了

3.传输层    网络设备通讯时,数据丢失和受损的情况经常出现      tcp和udp解决这一问题

一个是对传输速率高 udp    用于网络游戏以及语音聊天应用

 一个是对传输数据准确性高tcp

4.应用层 http  mqtt

mqtt  发布者  服务器  订阅者模式

http  请求  响应机制      它常被用来传输网页数据

5   ip  公网ip与局域网ip 

局域网ip就是平时我们所熟悉的 192.168.0.1  一般是路由器给我们分配的局域网地址  可以根据局域网ip进行局域网内的通讯

 不同的局域网组成了我们现在的互联网

6 什么是端口  为什么会用到他?

电脑上出现多个程序想要同时联网  通过ip地址发送了那个数据包  但是电脑不知道把这些数据包发给谁  或是谁发的   这个时候端口就有用了  理论上一台计算机有65535个端口

7什么是端口映射为什么要用到它?

当一个局域网内的两台电脑 都运行微信程序  微信都需要用到1234来传输数据端口映射

使用pubsubclient 库来进行创建mqtt连接

1.创建wifi连接对象   mqtt连接对象

WiFiClient   espClient;

PubSubClient MQTT_client(espClient); 

2定义 mqtt服务器  和端口号

const char *mqtt_broker = "139.9.128.158";

const int   mqtt_port   = 1883;

3.

 MQTT_client.setServer(mqtt_broker, mqtt_port);  //设置MQTT服务器地址与端口

  MQTT_client.setCallback(callback);              //设置MQTT接收数据回调函数

4.static void callback(char *topic, uint8_t *payload, uint16_t length);  // MQTT接收回调函数

进行编辑

5.mqtt进行连接

 MQTT_client.connect(imei.c_str(), mqtt_username, mqtt_password, Topic_INFO.c_str(), 0, true,

                            get_willMessage(off_line).c_str());  //连接MQTT服务器 设置遗嘱

入口参数 imei  mqttuser  pass  topic  qos  是否保存 遗嘱;

6. MQTT_client.publish 发布主题

7.订阅主题 MQTT_client.subscribe

在这里  把信息转化成json格式  去发布  

三个主题   一个公共的  用于状态

控制类的  状态类的

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐