blinker - 复活基于8266物联网智能语音双控开关-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2917|回复: 3

[分享] blinker- 复活基于8266物联网智能语音双控开关

[复制链接]
发表于 2020-4-5 18:17 | 显示全部楼层 |阅读模式
本帖最后由 keliyuan 于 2020-4-5 23:35 编辑

       偶的一块ESP8266模块,厂家库存,没有刷固件,不知好坏。
查看模块内置电源模块,继电器模块,直接220V输入,输出控制。通电测电源5V,3.3v正常。
看了论坛很多应用,想刷刷试试,手头没有USB转串口板,就用现成的Arduino板子做串口。

   
IMG_20200405_171927.jpg


找一块Arduino板子,断开328 RX,TX,引脚,连接RX,TX,引脚,负极。用一个小电阻短接8266的GPIO02-GND。
使用Arduino  IDE, 选择  WeMOS d1 R1  ,nodemcu,等8266都可以刷,就是引脚定义的不同。
刷入n次都没反应,以为没戏了,关机要放弃,忽然想起,短接刷机电阻未取下来。取下后尝试成功。模块满血复活,使用blinker可以自由控制。
     代码是学习论坛大神的作品,再次感谢分享。

022.jpg


023.jpg



[mw_shl_code=arduino,true]#define BLINKER_WIFI
#include <Blinker.h>   //在官方帖子里面可以下载
#include <DHT.h>  //家里面的网速可以的话,可以在ide管理库里面直接下载(在上传代码出错后)  DHT11.h  DHT-sensor-library
#include <LiquidCrystal_I2C.h>   //这是I2C的库文件

#define LED_BUILTIN1 D3    //定义灯的引脚
#define BUTTON_1 "btn-abc"   //定义手机软件blinker里面所需要的按钮的名字
BlinkerButton Button1(BUTTON_1);   //这里也可以写成BlinkeButton Button1("btn-abc")
#define LED_BUILTIN2 10    //定义灯的引脚
#define BUTTON_2 "btn-abc2"   //定义手机软件blinker里面所需要的按钮的名字
BlinkerButton Button2(BUTTON_2);   //这里也可以写成BlinkeButton Button1("btn-abc")

LiquidCrystal_I2C lcd(0x27,16,2);  //lcd27or36


BlinkerNumber HUMI("humi");   //定义blinker里面所需要的数值的名字
BlinkerNumber TEMP("temp");

#define DHTPIN D4         //定义dth的阵脚
#define DHTTYPE DHT11    // DHT 11//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);//
float humi_read = 0, temp_read = 0;  //初始化 温度和湿度的值

char auth[] = "8d82";//blinker里面的设备密码
char ssid[] = "China";//这里填写的是你家的WiFi
char pswd[] = " 123456";//这里填写的是你家 的WiFi密码

void heartbeat()//心跳包,每隔30秒,blinker打印温湿度的值
{
    HUMI.print(humi_read);//HUNI反馈到app
    TEMP.print(temp_read);
}

void button1_callback(const String & state)//按钮的回调函数
{
    digitalWrite(LED_BUILTIN1, !digitalRead(LED_BUILTIN1));//每调用一次 ,就改变一次状态 这里可以放在if 函数里面 if。。。on  digitai  high 这样的
    BLINKER_LOG("get button state: ", state);

   
    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        Button1.icon("icon_1");
        Button1.color("#00FF00");
        Button1.text("开灯");
        // Button1.text("Your button name", "describe");
        Button1.print("on");
    }
    else  if  (state == BLINKER_CMD_OFF) {
        BLINKER_LOG("Toggle off!");

        Button1.icon("icon_1");
        Button1.color("#FF0000");
        Button1.text("关灯");
        // Button1.text("Your button name", "describe");
        Button1.print("off");
    }
    else {
        BLINKER_LOG("Get user setting: ", state);

        Button1.icon("icon_1");
        Button1.color("#FFFFFF");
        Button1.text("Your button name or describe");
        // Button1.text("Your button name", "describe");
        Button1.print();
    }
}

void button6_callback(const String & state)//按钮的回调函数
{
    digitalWrite(LED_BUILTIN6, !digitalRead(LED_BUILTIN6));//每调用一次 ,就改变一次状态 这里可以放在if 函数里面 if。。。on  digitai  high 这样的
    BLINKER_LOG("get button state: ", state);

   
    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        Button6.icon("icon_1");
        Button6.color("#00FF00");
        Button6.text("开灯");
        // Button6.text("Your button name", "describe");
        Button6.print("on");
    }
    else  if  (state == BLINKER_CMD_OFF) {
        BLINKER_LOG("Toggle off!");

        Button6.icon("icon_1");
        Button6.color("#FF0000");
        Button6.text("关灯");
        // Button1.text("Your button name", "describe");
        Button6.print("off");
    }
    else {
        BLINKER_LOG("Get user setting: ", state);

        Button6.icon("icon_1");
        Button6.color("#FFFFFF");
        Button6.text("Your button name or describe");
        // Button6.text("Your button name", "describe");
        Button6.print();
    }
}

void setup()
{
    Serial.begin(115200);//电脑串口
    BLINKER_DEBUG.stream(Serial);//调试收发数据用
    BLINKER_DEBUG.debugAll();
   
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(LED_BUILTIN1, OUTPUT);//设置引脚编号
    pinMode(LED_BUILTIN6, OUTPUT);//D6
    digitalWrite(LED_BUILTIN, LOW);
    digitalWrite(LED_BUILTIN1, LOW);//将引脚设置为OUTPUT模式
    digitalWrite(LED_BUILTIN6, LOW);//D6
   
    lcd.init();                    // initialize the lcd //lcd 还有对比度,调后面的电阻
    lcd.init();                    //两行
    lcd.backlight();               //lcd的背光
   
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachHeartbeat(heartbeat);//注册回调函数
    dht.begin();
    Button1.attach(button1_callback);//注册回调函数
    Button6.attach(button6_callback);//注册回调函数
   
}


void loop()
{
    Blinker.run();

  
    float h = dht.readHumidity();//读取数据
    float t = dht.readTemperature();
   lcd.setCursor(0,0);//lcd显示
   lcd.print("Hum(%): ");//湿度
   lcd.setCursor(10,0);
   lcd.print(h);
    lcd.setCursor(0,1);
    lcd.print("Temp(oC): ");//温度
    lcd.setCursor(10,1);
    lcd.print(t);
   
    if (isnan(h) || isnan(t))
    {
        BLINKER_LOG("Failed to read from DHT sensor!");
        
    }
    else
    {
        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
        humi_read = h;
        temp_read = t;
        
    }
   
    Blinker.delay(2000);
}[/mw_shl_code]

APP端  配置

Screenshot_2020-04-05-23-11-01-355_iot.clz.me.png

关机状态
Screenshot_2020-04-05-11-29-50-143_iot.clz.me.png
开机状态
Screenshot_2020-04-05-11-29-57-306_iot.clz.me.png

定时  倒计时
Screenshot_2020-04-04-19-06-37-926_iot.clz.me.png



发表于 2020-4-5 20:43 | 显示全部楼层
app该更新了。。。你这大概是我们一年前的版本了
 楼主| 发表于 2020-4-5 23:11 | 显示全部楼层
本帖最后由 keliyuan 于 2020-4-5 23:27 编辑
奈何col 发表于 2020-4-5 20:43
app该更新了。。。你这大概是我们一年前的版本了
感谢老大提醒,blinker做的越来越好了。很多功能都很人性化,看来真是用心来做的。对比市面上的机智云,易微联,欣易联,HomeAssistant都人性,对小白来说都友好。
图一截图,用的是老版本,2个手机对比测试的截图,传错了,简单使用没有影响。
发表于 2020-6-12 22:38 | 显示全部楼层
为什么我这样添加第二个button组件时,程序就无法使用,随便注销一组button组件,就能使用了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:22 , Processed in 0.176536 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表