ESP32 接入点灯科技实现远程控制(物联网)

news2025/3/19 3:04:56

文章目录

  • 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的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    // 初始化blinker
    Blinker.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();
}
  • 添加设备蓝牙接入

在这里插入图片描述

  • 选择连接

在这里插入图片描述

  • 设备列表

在这里插入图片描述

  • 操作界面

在这里插入图片描述

  • 监听设备串口

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1694384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql图形化界面及将mysql注册成后台程序

安装图形化界面版本 右键新建数据库 字符集使用utf8防止以后数据库中存在中文字符导致乱码 将mysql注册成后台程序 cmd进入命令行界面 切换路径到cd /mysql/bin 将mysql注册成后台程序 mysqld.exe --install mysql1 (失败&#xff0c;说明没有权限) 以管理员身份打开成功…

每日5题Day10 - LeetCode 46 - 50

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;46. 全排列 - 力扣&#xff08;LeetCode&#xff09; class Solution {//这道题就是一个dfs//把所有结果遍历&#xff0c;到叶子节点就可以添加结果了List<Int…

忘记“也是一门学问:机器如何忘记自己学到的知识?

在信息时代&#xff0c;我们常常希望人工智能能够学到更多的知识&#xff0c;变得更加智能。但你是否想过&#xff0c;有时候让机器"忘记"一些它学到的东西&#xff0c;也是一件很重要的事&#xff1f; 随着用户隐私保护意识的提高和相关法律法规的出台&#xff0c;…

云端智享——记移动云手写docker-demo

目录 前言什么是移动云&#xff1f;为何我会使用移动云&#xff1f;移动云“好”在哪里&#xff1f;资源大屏显示继续项目部署其他细节 移动云产品的评价未来展望 前言 在如今这个万物都上云的时代&#xff0c;我们需要选择合适的云产品&#xff0c;而移动云有着独特的优势和广…

链表-设计LRU缓存结构

题目描述&#xff1a; 代码实现&#xff1a;这里记录了根据LRU算法原理最直接理解的代码实现。 import java.util.*;//存储输入内容&#xff0c;记录访问权值 class CounterInfo {int key;int value;int times;//代表key对应的权值&#xff0c;值越小优先级越高public Counter…

Android 自定义图片进度条

用系统的Progressbar&#xff0c;设置图片drawable作为进度条会出现图片长度不好控制&#xff0c;容易被截断&#xff0c;或者变形的问题。而我有个需求&#xff0c;使用图片背景&#xff0c;和图片进度&#xff0c;而且在进度条头部有个闪光点效果。 如下图&#xff1a; 找了…

用于时间序列概率预测的蒙特卡洛模拟

大家好&#xff0c;蒙特卡洛模拟是一种广泛应用于各个领域的计算技术&#xff0c;它通过从概率分布中随机抽取大量样本&#xff0c;并对结果进行统计分析&#xff0c;从而模拟复杂系统的行为。这种技术具有很强的适用性&#xff0c;在金融建模、工程设计、物理模拟、运筹优化以…

基于springboot+vue的招聘信息管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

大模型的灵魂解读:Anthropic AI的Claude3 Sonnet可解释性研究

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…

【C语言】C语言-设备管理系统(源码+数据文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

HarmonyOS开发之DevEco Studio安装

HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;为运行在HarmonyOS和OpenHarmony系统上的应用和服务&#xff08;以下简称应用/服务&#xff09;提供一站式的开发平台。 作为一款开发工具&#xff0c;除了具有基本的代码开发、编译构建及调测等功能…

Python高级进阶--slice切片

slice切片⭐⭐ 在 Python 中&#xff0c;切片操作是一种常见且方便的方式&#xff0c;用于从字符串、列表或元组中获取部分元素。这种操作通过指定起始索引、结束索引和步长来实现。下面我们来看一些关于切片的简单介绍以及一些常见用法。 1. 切片简介 取一个str、list、tup…

一文搞懂 Transformer(总体架构 三种注意力层)

本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__三个方面&#xff0c;带您一文搞懂Transformer&#xff08;总体架构 & 三种注意力层&#xff09;。 节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友…

出题123

题目时限空间说明 无特殊均默认 1 s , 256 M B 1s,256MB 1s,256MB Problem a 最大化 在最大化目标值的基础上选择的操作越多越好&#xff0c;且输出操作应当按照顺序执行&#xff0c;即你的输出顺序就是你的执行顺序&#xff0c;当有多个执行顺序可以最大化目标值时&#xff0…

GEE批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 最近很多小伙伴们私信我&#xff0c;问我如何高效导出遥感数据&#xff0c;从逐日到逐季度&#xff0c;我都有一套自己的方法&#xff0c;今天就来和大家分享一下&#xff01;   &#x1f50d;【逐日导出…

详解最新版RabbitMQ 基于RPM 方式的安装

如何选择安装版本 已经不支持的发布系列 版本最后补丁版本首次发布时间停止更新时间3.73.7.282017年11月28日2020年09月30日3.63.6.162015年12月22日2018年05月31日3.53.5.82015年03月11日2016年10月31日3.43.4.42014年10月21日2015年10月31日3.33.3.52014年04月02日2015年03…

Vivado报错集合

Synth 8-5535 报错代码 [Synth 8-5535] port <clk_0> has illegal connections. It is illegal to have a port connected to an input buffer and other components. The following are the port connections : Input Buffer:Port I of instance clkin1_ibufg(IBUF) i…

张大哥笔记:穷人都在拼命挣钱,而富人都在努力让自己更值钱

最近行业大佬&#xff0c;纷纷网红化&#xff0c;比如周鸿祎&#xff0c;雷军&#xff0c;刘强东纷纷下场&#xff01; 大佬当网红&#xff0c;图啥&#xff1f;当然是图钱了。 大佬都很精的&#xff0c;他们老早就运用媒体的传播杠杆&#xff0c;把自己热度炒起来。 在不断…

类和对象(下篇)(未完结)!

文章目录 在谈构造函数1.构造函数体赋值2.初始化列表尽量使用初始化列表&#xff1f;初始化列表的初始化顺序&#xff1f;成员变量声明处的缺省值构造函数支持类型转换3.explicit关键字 static成员 在谈构造函数 1.构造函数体赋值 class Date{public:Date(int year, int mont…

MATLAB:插值函数之interp与griddata

MATLAB 提供了多种插值函数来处理不同维度的数据。其中&#xff0c;interp1、interp2 和 griddata 是常用的插值函数&#xff0c;分别用于一维、二维和多维&#xff08;不规则&#xff09;数据的插值。 之前有对interp1进行过详细介绍&#xff0c;如需详细了解&#xff0c;请查…