零基础入门
如果你没有接触过单片机或创客项目,第一次使用Node-MQ时可能会遇到一些陌生的概念。本章将对Node-MQ涉及的硬件和通信概念进行简要介绍。
ESP32-S3
ESP32-S3是一款由 Espressif(乐鑫) 推出的微控制器(MCU)芯片。
微控制器可以运行程序,并具有可连接外部器件的引脚和接口。ESP32-S3的特点是它同时集成了Wi-Fi功能。
开发板
开发板是以某种微控制器为核心制作的电路板。
开发板为微控制器提供运行所需的电源和外围电路,并将微控制器的引脚以焊接排针或连接器的形式引出,以方便连接其他电子模块。开发板引出的接口通常包括:
- GPIO - 通用数字输入输出,可以读取开关状态,也可以控制LED等设备。
- ADC - 模拟输入,可以读取电压大小,例如光照、温敏电阻等传感器产生的模拟信号。
- PWM - 通过输出周期性的高低电平来控制设备,例如调节LED亮度或控制舵机。
- UART - 串行通信接口,常用于连接GPS、串口屏等设备。
- I2C - 两线通信接口,可以连接LCD、OLED、温湿度传感器等多个设备。
- SPI - 速度较高的串行通信接口,常用于连接显示屏、存储器等设备。
固件
运行在微控制器或嵌入式设备上的程序通常称为固件(Firmware)。
Node-MQ是运行在ESP32-S3微控制器上的通用固件。用户可以通过MQTT、WebSocket或UART接口向Node-MQ发送指令,实现硬件资源的配置与控制,而无需接触编程或固件烧录等操作。
“通用固件”的意思是,固件本身不实现特定的功能,而是提供一套通用接口,用户使用这些接口实现所需的功能。
MQTT
MQTT是一种用于物联网设备之间通信的网络协议。
物联网设备(客户端)连接到一个称为 MQTT Broker 的服务器。设备可以向Broker发布消息,也可以订阅其他设备发布的消息。
MQTT Broker 通过消息主题(Topic)来分发消息。客户端发布的消息包含该消息的主题,MQTT Broker 收到消息后将其分发给所有订阅了该主题的客户端。
Node-MQ支持通过MQTT接收和发送数据。因此可以通过网络远程控制Node-MQ设备。
WebSocket
WebSocket是一种网络通信方式,可以在客户端和服务器之间建立持续的双向通信连接。
与普通的HTTP请求相比,WebSocket连接建立后,双方都可以主动发送数据。
Node-MQ提供WebSocket接口,可以使用网页、程序或其他客户端直接与Node-MQ进行实时通信。
JSON
JSON是一种常见的数据表示格式,适合在不同程序之间传递结构化数据。
例如,下面是一条Node-MQ指令:
{
"action": "digital_write",
"high": 5
}
- Node-MQ指令是一个用大括号包围的JSON对象。
- JSON对象包含由逗号分隔的属性。属性由属性名称与属性值构成,使用冒号分隔。
在以上例子中,名为 action的属性表示要执行的操作,其值为digital_write;名为high的属性表示要设置为高电平的GPIO序号,其值为5。
注意
JSON格式中的语法符号(逗号、冒号、双引号、大括号、中括号)均为英文(半角)符号,而非中文(全角)符号。
Node-MQ使用JSON作为数据传输的格式,无论MQTT、WebSocket还是UART,都使用相同的JSON格式指令。
JSON转义
JSON中的字符串使用双引号包围。如果字符串本身包含双引号、反斜杠等特殊字符,就需要使用转义表示。
例如,下面的字符串中包含双引号包围的"Hello":
{
"text": "He said \"Hello\""
}其中 \" 就是普通双引号"的转义表示。转义表示通常称作转义序列(Escape Sequences)。
JSON中常见的转义序列有:
\"- 双引号\\- 反斜杠\/- 斜杠(可选)\b- 退格键\f- 换页符\n- 换行符\r- 回车符\t- 水平制表符\uXXXX- 特殊字符的Unicode转义序列
Base64
Base64是一种将数据转换为普通文本的方法。
有些数据不适合直接作为JSON文本传输,例如二进制文件、图片或其他包含特殊字符的数据。可以先将这些数据编码为Base64字符串,再作为JSON文本进行传输。
例如:
He said "Hello"经过Base64编码后成为:
SGUgc2FpZCAiSGVsbG8i提示
Base64不是加密方式。它只是改变数据的表示形式,不能用于保护数据安全。
Hex编码
Hex(十六进制)编码是使用十六进制数字文本表示二进制数据的一种方式。
例如,一个字节的二进制数据:
11111111可以表示为Hex文本:
FF在电子开发中,Hex格式经常用于表示原始数据,例如UART、I2C、SPI等接口传输的数据。
例如Hex文本:
0102FFA5表示4个字节的数据:
0x01 0x02 0xFF 0xA5Hex和Base64都可以用于表示二进制数据,但它们的表示方式不同。Hex通常更适合需要直接查看的原始字节数据,而Base64更适合只需要以JSON等文本格式进行传输的数据。