Skip to content

零基础入门 ​

如果你没有接触过单片机或创客项目,第一次使用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指令:

json
{
  "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":

json
{
  "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 0xA5

Hex和Base64都可以用于表示二进制数据,但它们的表示方式不同。Hex通常更适合需要直接查看的原始字节数据,而Base64更适合只需要以JSON等文本格式进行传输的数据。