文章目录
- ESP32-C3
- MQTT协议
- blinker App 源码
- blinker 开发者
- Arduino 支持文档
- 导入 blinker 库
- 注册点灯 APP
- blinker WiFi 示例
- blinker 蓝牙示例
本示例中开发板使用的是Seeed Studio (XIAO-ESP32-C3)
ESP32-C3
ESP32-C3 是 Espressif Systems 公司开发的一款单核 Wi-Fi 和蓝牙双模 SoC(系统级芯片),基于 RISC-V 架构,旨在为物联网(IoT)应用提供高性能和低功耗的解决方案。
- 核心架构:
处理器: ESP32-C3 使用的是 32 位 RISC-V 架构的单核处理器,工作频率最高可达 160 MHz。
内存: 包含 400 KB 的 SRAM,另外还集成了 8 KB RTC(实时时钟)内存,用于低功耗状态下的数据存储。 - 无线连接:
Wi-Fi: 支持 2.4 GHz Wi-Fi,符合 IEEE 802.11 b/g/n 标准,具有 STA(站点)、AP(接入点)和 STA+AP 共存模式。
蓝牙: 支持蓝牙 5.0 LE(低功耗),包括支持长距离传输、广告扩展、2M PHY 等特性。 - 安全性:
硬件加密: 提供 AES-128/192/256、SHA-1、SHA-2、RSA 和 ECC 等加密算法的硬件加速。
安全启动: 支持通过 RSA-3072 的安全启动功能,确保固件的完整性和真实性。
闪存加密: 支持 AES 加密的闪存加密功能,保护固件和用户数据的安全。 - 低功耗:
电源管理: 支持多种低功耗工作模式,包括浅睡眠模式、深度睡眠模式和待机模式,可以显著降低能耗,适用于电池供电的 IoT 应用。 - 外设和接口:
GPIO: 提供多达 22 个可配置的 GPIO 引脚,支持 PWM、ADC、DAC、I2C、SPI、UART 等多种外设接口。
ADC: 集成了 12 位精度的 ADC,适用于传感器数据采集等应用。
定时器: 内置多个定时器和看门狗定时器,用于精确计时和系统安全。 - 开发支持: 开发工具: Espressif 提供了完善的软件开发工具链,包括 ESP-IDF(Espressif IoT Development Framework),以及对 Arduino、MicroPython 等第三方平台的支持。
参考设计和文档: 提供详细的硬件设计参考、电路图、数据手册和编程指南,帮助开发者快速上手。 - 应用场景: ESP32-C3 适用于各种物联网应用,如智能家居、工业自动化、健康监测、可穿戴设备、环境监测等。这些应用通常要求设备具有稳定的无线连接、高效的能量管理以及可靠的安全特性。
MQTT协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为受限环境下的设备设计,特别适用于物联网(IoT)应用。MQTT 由 IBM 在 1999 年开发,并在 2013 年成为 OASIS 标准。
- 协议模型: MQTT 采用发布/订阅(publish/subscribe)模型,而不是传统的请求/响应模型。这个模型中,客户端通过主题(topic)进行消息发布和订阅,服务器(称为代理或 broker)负责消息的转发。
- 轻量级: MQTT 设计简单,协议开销小,非常适合网络带宽有限和资源受限的设备,如传感器、微控制器等。
blinker App 源码
- https://github.com/blinker-iot/blinker-app
blinker 开发者
- https://diandeng.tech/dev
Arduino 支持文档
- https://diandeng.tech/doc/arduino-support
导入 blinker 库
- 从导入的库中打开点灯官方示例
注册点灯 APP
- 添加独立设备
- 选择网络接入
- 修改名称/获取设备密钥
- 编辑设备界面组件
blinker WiFi 示例
#define BLINKER_WIFI#include <Blinker.h>char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID or name";
char pswd[] = "Your WiFi network WPA password or WEP key";// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");int counter = 0;// 按下按键即会执行该函数
void button1_callback(const String & state)
{BLINKER_LOG("get button state: ", state);digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{BLINKER_LOG("Blinker readString: ", data);counter++;Number1.print(counter);
}void setup()
{// 初始化串口Serial.begin(115200);BLINKER_DEBUG.stream(Serial);BLINKER_DEBUG.debugAll();// 初始化有LED的IOpinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);// 初始化blinkerBlinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead);Button1.attach(button1_callback);
}void loop() {Blinker.run();
}
- 烧录完成并连接上网络后刷新APP设备列表
设备在线说明设备网络与密钥没问题。
- 点击按键发送数据
- 监听设备串口数据
blinker 蓝牙示例
#define BLINKER_BLE#include <Blinker.h>BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");int counter = 0;void button1_callback(const String & state)
{BLINKER_LOG("get button state: ", state);digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}void dataRead(const String & data)
{BLINKER_LOG("Blinker readString: ", data);counter++;Number1.print(counter);
}void setup()
{Serial.begin(115200);BLINKER_DEBUG.stream(Serial);pinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);Blinker.begin();Blinker.attachData(dataRead);Button1.attach(button1_callback);
}void loop()
{Blinker.run();
}
- 添加设备蓝牙接入
- 选择连接
- 设备列表
- 操作界面
- 监听设备串口