写在前面
esp小黄版不提供技术支持,但是还在卖!给的APP也不能用了,百度了一圈,没用能直接用的APP,放着也是放着,就造个简单控制页面。
切记是这款!!!
代码写的是狗看了都摇头,但是能用,懒得优化,都写了备注,自己改改,写给新手或者图方便的老铁,如果能帮忙优化一下就更好了。
直奔主题上代码!
复制到arduino直接烧录即可,需要esp8266的库,直接按点灯科技的入门来就行了,反正获取秘钥的时候你也要看的。
https://diandeng.tech/doc/getting-start-8266
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "点灯里面获取的秘钥";
char ssid[] = "你的wifi账号";
char pswd[] = "你的wifi密码";
// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerButton Button2("btn-led");
BlinkerButton Button3("btn-getled");
BlinkerButton Button4("btn-mco");
BlinkerButton Button5("btn-3qi");
BlinkerButton Button6("btn-jkf");
BlinkerButton Button7("btn-f6x");
BlinkerButton Button8("btn-o32");
BlinkerButton BL1("btn-16");
BlinkerButton BL2("btn-14");
BlinkerButton BL3("btn-5");
BlinkerButton BL4("btn-4");
BlinkerButton BL5("btn-0");
BlinkerButton BL6("btn-2");
BlinkerButton BLs[]={BL1,BL2,BL3,BL4,BL5,BL6};
BlinkerNumber Number1("num-eji");
BlinkerRGB RGB1("col-rgb");
int leds[]={16,14,5,4,0,2};//LEDGPIO
int rgbs[]={15,12,13};//RGBGPIO
//LED初始化
void ledsMode(){
for(int i=0;i<6;i++){
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i],HIGH);
}
}
//RGB初始化
void rgbsMode(){
for(int i=0;i<3;i++){
pinMode(rgbs[i], OUTPUT);
}
}
//调色板
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);
BLINKER_LOG("G value: ", g_value);
BLINKER_LOG("B value: ", b_value);
BLINKER_LOG("Rrightness value: ", bright_value);
analogWrite(rgbs[0],r_value);
analogWrite(rgbs[1],g_value);
analogWrite(rgbs[2],b_value);
}
//rgb关闭
void button7_callback(const String & state){
analogWrite(rgbs[0],0);
analogWrite(rgbs[1],0);
analogWrite(rgbs[2],0);
}
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void bl1_callback(const String & state) {
int i = 0;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL1.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
void bl2_callback(const String & state) {
int i = 1;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL2.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
void bl3_callback(const String & state) {
int i = 2;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL3.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
void bl4_callback(const String & state) {
int i = 3;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL4.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
void bl5_callback(const String & state) {
int i = 4;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL5.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
void bl6_callback(const String & state) {
int i = 5;
BLINKER_LOG("get button state: ", state);
digitalWrite(leds[i], !digitalRead(leds[i]));
BL6.print(digitalRead(leds[i])==LOW ? "on" : "off");
}
//获取LED状态赋予按钮
void button3_callback(const String & state){
for(int i=0;i<6;i++){
BLs[i].print(digitalRead(leds[i])==LOW ? "on" : "off");
}
}
//LED全关
void button4_callback(const String & state){
for(int i=0;i<6;i++){
digitalWrite(leds[i],HIGH);
Blinker.delay(50);
}
}
//LED全开
void button5_callback(const String & state){
for(int i=0;i<6;i++){
digitalWrite(leds[i],LOW);
Blinker.delay(50);
}
}
int ll=0;
//跑马灯
void button6_callback(const String & state){
if(state!="off"){
ll=1;
Button6.print("on");
}else{
ll=0;
Button6.print("off");
}
}
void ledloops(){
for(int i=0;i<6;i++){
int a=1;
if(i==0){
a=5;
}else{
a=i-1;
}
digitalWrite(leds[a],HIGH);
digitalWrite(leds[i],LOW);
Blinker.delay(50);
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
uint32_t BlinkerTime = millis();
Blinker.vibrate();
Blinker.print("millis", BlinkerTime);
}
void ledsLoop(const String & state){
BLINKER_LOG("get button state: ", state);
for(int i=0;i<5;i++){
digitalWrite(leds[i], HIGH);
Blinker.delay(50);
}
for(int i=0;i<5;i++){
digitalWrite(leds[i], LOW);
Blinker.delay(50);
}
}
//实时数据
void rtData()
{
Blinker.sendRtData("wd", random(0,120));
Blinker.sendRtData("sd", random(0,120)/2.0);
Blinker.sendRtData("xd", random(0,120)/3.0);
Blinker.printRtData();
}
//历史数据
void dataStorage()
{
Blinker.dataStorage("wd", random(0,120));
Blinker.dataStorage("sd", random(0,120)/2.0);
Blinker.dataStorage("xd", random(0,120)/2.0);
}
//微信通知测试
void button8_callback(const String & state){
Blinker.wechat("Title: button", "State: pressed", "Message: hello blinker");
}
void setup() {
// 初始化串口
Serial.begin(115200);
//BLINKER_DEBUG.stream(Serial);
// 初始化GPIO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
ledsMode();
rgbsMode();
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Blinker.attachRTData(rtData);
Blinker.attachDataStorage(dataStorage);
Button1.attach(button1_callback);
Button2.attach(ledsLoop);
BL1.attach(bl1_callback);
BL2.attach(bl2_callback);
BL3.attach(bl3_callback);
BL4.attach(bl4_callback);
BL5.attach(bl5_callback);
BL6.attach(bl6_callback);
Button3.attach(button3_callback);
Button4.attach(button4_callback);
Button5.attach(button5_callback);
Button6.attach(button6_callback);
Button7.attach(button7_callback);
Button8.attach(button8_callback);
RGB1.attach(rgb1_callback);
}
void loop() {
Blinker.run();
if(ll==1){
ledloops();
}
}
UI长这样
键名“btn-abc”对应BlinkerButton Button1(“btn-abc”)构造参数
一个个拖一个个改名就行
烧录
小黄板不能直接连电脑,需要TTL,tx和rx不用交叉,记得盖上跳帽
一些问题
代码是我Java的习惯写的,arduino我也是萌新宝宝,不知道对象操作能做到哪种程度,有的没的代码都留上面了,所以看起来有些四不像,反正能跑能用(骄傲!)
切记把包都用最新版,不然实时数据会有小问题。
光敏电阻可以从ADC直接读取(analogRead(A0))没啥用我就没加,你可以直接把传递实时数据的随机数换成读取光敏电阻。
ps:电源LED太刺眼可以直接拔掉。
没人比我更懒
原理图我直接复制粘贴!