| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 基于esp32的MQTT服务器简单WiFi通信(零基础) -> 正文阅读 |
|
[系统运维]基于esp32的MQTT服务器简单WiFi通信(零基础) |
作者:recommend-item-box type_blog clearfix |
实验准备
(一)网络的分层结构 一般分为五层:
2、传输层(Transport Layer):我们添加了一个参数,这个参数被称为“端口”(port)。每个任务拥有自己port,只接受对应port的数据,以此来区分数据。 3、网络层(Network Layer):少部分设备组成局域网,形成子网络,然后子网络不断组网形成覆盖全球的网络。以太网协议是通过MAC地址来寻址的(类似I2C的地址),但在如此巨大的网络中不可能每次寻找设备还需要给每个设备发送信息来匹配MAC地址,此时就产生“网址”的概念。此时,每一个网络设备就有了2种地址,一个是MAC地址,一个IP网络地址。 (1)MAC地址:又名物理地址、硬件地址,如身份证号一样,每个网络设备的MAC地址具有唯一性。 (2)IP地址:常见的IPv4协议,这个协议规定,网址由32个bit组成习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。互联网上的每个设备,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表设备。问题在于单单从IP地址,我们无法判断网络部分具体的占位。利用子网掩码,分别进行&运算,若两IP地址运算结果相同则说明它们在一个网络中。比如,已知IP地址192.168.1.1和192.168.1.5的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是192.168.1.0,因此它们在同一个子网络。 IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。 4、链接层(Link Layer):对0和1的定义进行规定(类似低电平为0,高电平为1),同时在传输0,1之后还需要对01进行分组如8bit为一个字节多少字节为一个包之类。这就是链接层的功能。Ethenet和Wifi基本就是属于这个层次。所以wifi协议其实就是解决的一个链路和物理层的问题 5、物理层(Physical Layer):硬件连接手段,规定设备的电气特性。例如:网线数量,无线信号的频段等。 每一个层都是完成了某一种功能,为了功能实现,所以规定了一些规则,这些规则就被称为“协议”(protocol)。
1、AP,就是无线接入点,是一个无线网络的创建者,是网络的中心节点。例如家用无线路由器就是一个AP。 2、STA站点,每一个连接到无线网络的终端(手机电脑等用户设备)都可以成为STA站点。 (三)什么是MQTT MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议 简单来说MQTT服务器(常应用于物联网领域IOT)则是提供给我们一个可以实现远程信息传入的AP节点。
我在这里选用了ardino的开发环境,也可选择vs code。 (2021.10.5实测有效) 实验过程
参考博客 基本原理:用esp32作为终端(SAT),利用已有的MQTT服务器作为AP,进行数据的传输(可以实现双向) 1,固件库的安装 (1)Esp32开发板的安装 (2)PubSubClient 库的安装 ? 2,主要过程 (1)首先我们将导入 WiFi 和 PubSubClient 库,ESP8266WiFi 库能够将 ESP32 连接到 Wi-Fi 网络,PubSubClient 库能使 ESP32 连接到 MQTT 服务器发布消息及订阅主题。 创建实例化对象来使用wifi与MQTT功能 (2)设置 Wi-Fi 名称和密码,以及 MQTT 服务器连接地址和端口,设置 topic 为 “esp32/test”(注意这里wifi名字与密码是我自己热点的,用的时候更改一下) (3)set up()函数(只进行一次,相当于初始化)(主要都是库函数 了解怎么调用即可) 其作用是规定串口通信的波特率,连接WiFi,连接到公共的MQTT broker。 1’?WiFi连接 2’连接到公共的MQTT broker 3’?简单的通信测试 (4)Loop()函数 Loop函数 其实是一个一直运行的循环函数,我们需要的数据传输在这里进行,其实在测试样例中我们只需要一个client.publish(),但在这之前需要对其后一个参数进行类型转换,char*与string类都不行。 client.publish(topic, (char*) payload.c_str()) ?可以看博客MQTT client.publish, How do I publish a string? · Issue #334 · knolleary/pubsubclient · GitHub 对于这个问题的讨论。 也可以用 String.toCharArray()对string进行类型转换(这个没试)。 每500ms传输一次数据。(在此是随意测试数据样例) 完整代码如下:
3.MQTT服务器相关设置 下载MQTT X 客户端 新建一个连接(设置如下图) Password:public(这些设置需要与你代码中的设置一致才能成功连接) 将代码烧录进入esp32中,点向右箭头即可。 ? 最后用串口调试助手和MQTT X检验结果。 这是串口自己打印的结果,用serial函数。 这是在公共服务器中显示的结果,用client.publish()来打印的。由此可知数据传输的基本任务大致完成。 ? 注:博主也是刚开始接触esp32,很多资料都是网上查找,如果有缺漏欢迎各位指正。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 18:32:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |