使用Blinker(点灯科技APP)与ESP32单片机实现远程控制RGB灯

使用Blinker(点灯科技APP)与ESP32单片机实现远程控制RGB灯

一、项目简介

本项目基于点灯科技的一款物联网服务平台APP——Blinker和一块32位物联网单片机——ESP32。实现远程控制RGB灯的开关和调节颜色及亮度

  • 一个ESP32单片机

  • 一个RGB灯

  • 四根杜邦线

  • 一条microUSB数据线

1.Blinker

1.1 APP下载

安卓端下载 苹果端下载

1.2 APP界面

在这里插入图片描述

2.ESP32

2.1 ESP32实物图

在这里插入图片描述

2.2 ESP32引脚图

在这里插入图片描述
ESP32简介 https://makeronsite.com/esp32-intro.html

二、项目实现步骤

1.硬件连线

1.1 引脚连接表
RGBESP32
RGPIO 5
GGPIO 18
BGPIO 19
-GND
1.2 硬件连线仿真图:

在这里插入图片描述

1.3 硬件连线实物图:

在这里插入图片描述

2.软件配置

2.1 创建联网设备

在这里插入图片描述在这里插入图片描述

2.2 查看Blinker提供的设备密钥

在这里插入图片描述在这里插入图片描述

2.3生成APP交互界面

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.实现代码

#define BLINKER_WIFI   //定义连接的模式,BLINKER_WIFI 表示使用ESP8266/ESP32

#include <Blinker.h>   //导入Blinker库的Blinker.h头文件 导入前需要提前下载Blinker库

#define RED 5		//定义RED 为GPIO 5
#define GREEN 18	//定义GREEN 为GPIO 18
#define BLUE 19		//定义BLUE 为GPIO 19

uint8_t R_val=0;  	//定义红灯的电压模拟值并赋初值为0
uint8_t G_val=0;	//定义绿灯的电压模拟值并赋初值为0
uint8_t B_val=0;	//定义蓝灯的电压模拟值并赋初值为0

char auth[] = "";  //此处输入Blinker提供的密钥
char ssid[] = "";	//此处输入要连接的热点名称
char pswd[] = "";	//此处输入要连接的热点密码

/*
*新建组件对象
*/
BlinkerButton Button1("btn-abc");  	//新建对象名为btn-abc的按键
BlinkerButton Button2("btn-def");	//新建对象名为btn-def的按键
BlinkerRGB RGB1("col-ghi");		//新建对象名为col-ghi的按键
BlinkerNumber NUMR("num-R");	//新建对象名为num-R的数字
BlinkerNumber NUMG("num-G");	//新建对象名为num-G的数字
BlinkerNumber NUMB("num-B");	//新建对象名为num-B的数字

// 按下按键Botton1即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    analogWrite(RED, 0);
    analogWrite(GREEN, 0);
    analogWrite(BLUE, 0);   
}
// 按下按键Botton2即会执行该函数
void button2_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    analogWrite(RED, 255);	//对RED引脚写入模拟值255
    analogWrite(GREEN, 255);	//对GREEN引脚写入模拟值255
    analogWrite(BLUE, 255);   	//对BLUE引脚写入模拟值255
}

//该函数用于获得APP颜色组件的RGB数据
void rgb1_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value)
{
    BLINKER_LOG("R value: ", r_value); 	//获得R(红光)的值
    BLINKER_LOG("G value: ", g_value);	//获得G(绿光)的值
    BLINKER_LOG("B value: ", b_value);	//获得B(光)的值
    BLINKER_LOG("Rrightness value: ", bright_value);	//获得bright(亮度)的值
    R_val=map(r_value,0,255,0,bright_value);	//红光的值由0~255重映射为0~bright_value
    G_val=map(g_value,0,255,0,bright_value);	//绿光的值由0~255重映射为0~bright_value
    B_val=map(b_value,0,255,0,bright_value);	//蓝光的值由0~255重映射为0~bright_value
    analogWrite(RED,R_val);			//对RED写入模拟值R_val
    analogWrite(GREEN,G_val);		//对GREEN写入模拟值G_val
    analogWrite(BLUE,B_val);		//对BLUE写入模拟值B_val
    NUMR.print(R_val);		//对NUMR数字组件写入R_val数据
    NUMG.print(G_val);		//对NUMG数字组件写入G_val数据
    NUMB.print(B_val);		//对NUMB数字组件写入B_val数据
}

//初始化设置
void setup()
{
    Serial.begin(115200);	// 初始化串口设置波特率为115200bps
    /* 初始化有LED的IO */
    pinMode(RED, OUTPUT);		//RED引脚设为输出
    analogWrite(RED, LOW);		//把RED引脚初始化为低电平
    pinMode(GREEN, OUTPUT);		//GREEN引脚设为输出
    analogWrite(GREEN, LOW);	//把GREEN引脚初始化为低电平
    pinMode(BLUE, OUTPUT);		//BLUE引脚设为输出
    analogWrite(BLUE, LOW);		//把BLUE引脚初始化为低电平
    /* 初始化blinker */
    Blinker.begin(auth, ssid, pswd); 	//连接无线热点,热点需要能连接互联网
    RGB1.attach(rgb1_callback);			//连接RGB1颜色组件
    Button1.attach(button1_callback);	//连接Button1按键组件
    Button2.attach(button2_callback);	//连接Button2按键组件
}

//无限循环
void loop() {
    Blinker.run(); //启动Blinker物联功能
}

4.程序烧录

4.1 下载芯片支持包

!!务必下载2.0.9版本,Blinker目前仅支持到2.0.9,使用最新版本会导致程序烧录失败!!!
在这里插入图片描述

4.2 选择开发板与端口号
  • 开发板选择ESP32-WROOM DA Module
  • 端口选择USB所连接的端口 可通过设备管理器查看
  • 其他设置默认即可
  • 最后点击烧录程序
    在这里插入图片描述
为了使用Blinker点灯科技以及ESP8266配合INA226测量电压、电流和功率,你需要先安装必要的库和理解基本的硬件连接。以下是使用Arduino IDE编写的一个简化示例,因为ESP8266通常配合Arduino框架使用,而不是直接Python搭配。如果你想要实时显示数据到手机,可能需要一个Wi-Fi连接和移动应用程序来接收数据。 **步骤1**: 首先,在Arduino IDE中新建一个项目,并添加以下依赖库: - `Wire` - 用于I2C通信 - `Blinker` - Blinker框架用于构建物联网设备 **步骤2**: 硬件连接: - 将INA226的SCL/SDA引脚分别连接到ESP8266的对应I2C端口 - 如果你想测量交流电压,可能还需要外部的电压采样电阻网络 - ESP8266的数字IO引脚作为LED指示,用于简单地显示工作状态 **步骤3**: 编写代码: ```cpp #include <Wire.h> #include <Blinker.h> // INA226 register addresses const int CONFIG_ADDR = 0x00; const int DATA_ADDR = 0x01; float voltage, current, power; void setup() { Serial.begin(9600); // 打开串口调试助手 Wire.begin(); // 初始化I2C pinMode(LED_BUILTIN, OUTPUT); // LED作为状态指示 } void loop() { // Read voltage and current from INA226 uint16_t configData, dataData; Wire.beginTransmission(INA226_ADDRESS); Wire.write(CONFIG_ADDR); Wire.endTransmission(); delayMicroseconds(20); Wire.requestFrom(INA226_ADDRESS, 2); configData = Wire.read(); dataData = Wire.read(); if (configData == 0x0F && dataData >= 0x80) { // Check for successful measurement float shuntVolts = (dataData & 0x7F) * 16 / 256; // Calculate shunt voltage voltage = shuntVolts * scalingFactor; // Scale voltage based on calibration current = shuntVolts / resistance; // Assuming a known external resistor for current power = voltage * current; // Calculate power blinkLED(power > threshold); // Flash LED if power is above a threshold } // Send voltage, current, and power to mobile app via Wi-Fi or MQTT sendToMobileApp(voltage, current, power); delay(1000); // Measure periodically } // Helper function to blink the built-in LED based on condition void blinkLED(bool condition) { digitalWrite(LED_BUILTIN, condition ? HIGH : LOW); } // Example function to send data over Wi-Fi using a library like Adafruit MQTT void sendToMobileApp(float voltage, float current, float power) { // Your mobile app code should listen to this topic to retrieve data String message = "voltage=" + String(voltage) + ", current=" + String(current) + ", power=" + String(power); // Code to publish message via MQTT or any other connection method } ``` **注意事项**: - 程序中的`scalingFactor`, `resistance`, `INA226_ADDRESS`, `threshold`, 和 `sendToMobileApp()`函数需要根据实际情况进行调整。 - 请确保已经配置了ESP8266的无线网络连接,并且手机上的应用程序能正确订阅接收来自ESP8266的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值