查看: 757|回复: 7
打印 上一主题 下一主题

[分享] ESP8266 +Blinker 遥控空调

[复制链接]
  • TA的每日心情
    慵懒
    2020-9-30 09:16
  • 签到天数: 187 天

    [LV.7]常住居民III

    跳转到指定楼层
    楼主
    发表于 2020-9-6 16:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 王尼玛1 于 2020-9-7 21:10 编辑
    一.软件准备
         IRremoteESP8266库文件githup链接:https://github.com/crankyoldgit/IRremoteESP8266
           Blinker库文件   链接: https://github.com/blinker-iot/blinker-library
           下载好解压后复制文件到Arduino安装目录下的library文件夹里
    二.硬件方面:
    • 一块ESP8266开发版,nodeMUC 和 esp01 都行,推荐用nodemcu
    • 5mm红外发射二极管(最好多准备几个)
    • 100欧母电阻诺干
    • 杜邦线诺干
    • 一个NPN三极管(官方推荐的是2N3904,我用的是9013)
    三.电路链接
      1.如果用的是nodemuc:

    图中 红色LED表示红外二极管,这个限流电阻的大小理论10-100欧都行
         2.如果的是ESP-01 需要把三极管的基极接到RX引脚也就是GPIO3,其他的连接不变。这里要注意在写代码的时候得加上 pinMode(3,OUTPUT);  (不接GPIO0和GPIO2是因为这两个             脚 不稳定)
    四.代码编写
    这里以我家里的空调为例,其他品牌的写法大致相同,我的是美的,在这之前先看看这个库文件都支持操作哪些牌子的空调  https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md
      接下来打开Arduino IDE,一次点击 文件 --> 示例 --> IRremoteESP8266 --> TurnOnGreeAC  如图

    这个是格力空调的示例;打开后的程序一般只要修改头文件和类名就可测试程序,比如我的是美的空调,把  #include <ir_Gree.h> 改为 include <ir_Midea.h> ,再把  IRGreeAC ac(kIrLed);  改为 IRMideaAC ac(kIrLed); 就可以了,这个头文件的具体名字可以在Arduino的安装目录下libraries --> IRremoteESP826 --> src   这里有所有支持的源代码文件
    这里还有一种情况可能不能成功,还是以我的空调为例,我的是美的,修改头文件和类名上传程序后,对着空调测试并没有反应,刚开始以为是发射管功率太小,距离太远空调没接收到,然后我把接在发射管的限流电阻拿掉,但还是没反应,发射管还烧了三个。。。。最后怀疑发射管的发出的命令可能不对。解决的办法是用一个红外接收模块来测试,如图:

    将信号端接到NODEMCU的D5脚,然后打开ArduinoIDE --> 文件 --> 示例 --> IRremoteESP8266 --> IRrecvDumpV2 上传后打开串口监视器,波特率改为115200;然后拿空调的遥控器对着外接收模块,按下遥控器的任意按键,看串口监视器的输出信息,我的是这样.

    百度 COOLIX ,原来这是美的在德国的牌子,再去Arduino的安装目录下libraries --> IRremoteESP826 --> src 这里找,果然有相关的头文件;如图

    然后在回到的那个格力空调的示例程序 ,把  #include <ir_Gree.h> 改为 include <ir_Coolix.h> ,再把  IRGreeAC ac(kIrLed);  改为 IRCoolixAC ac(kIrLed); 上传,这时空调就有反应了
    可以打开相关的头文件和cpp文件看具体提有哪些方法,通常使用的就这些:
    • void begin();           //初始化空调对象 ac.begin(); 放在setup()里就好
    • void on();                 // 打开空调 ac.on()
    • void off();                 //关闭空调 ac.off();
    • bool getPower();     //查询调是否开启,返回布尔值,返回为值为true表示空调开启
    • void setMode(const uint8_t mode);  //设置空调模式,具体参数得看cpp文件,
    • void setTemp(const uint8_t temp);   //设置温度,参数范围是16 - 30
    • void setFan(const uint8_t speed, const bool modecheck = true); //设置分速,参数一般是(1-5)
    其他还有很多方法,这里就先不讲了;有关Blinker的部分我这里就不在详细说明,我还加了DHT11来测房间的温度,这里看下的我界面,

    最后,我的所有代码,可以参考一下  https://gitee.com/yym001/blinker ... ob/master/Midea.ino

    程序还有很多地方可以完善
  • TA的每日心情
    慵懒
    2020-9-30 09:16
  • 签到天数: 187 天

    [LV.7]常住居民III

    沙发
     楼主| 发表于 2020-9-7 22:26 | 只看该作者
    本来想再写Blinker的内容的,但太多了。。。
  • TA的每日心情
    奋斗
    2020-8-3 08:22
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    板凳
    发表于 2020-9-16 10:37 | 只看该作者
    先支持再慢慢学习
  • TA的每日心情
    慵懒
    2020-9-30 09:16
  • 签到天数: 187 天

    [LV.7]常住居民III

    地板
     楼主| 发表于 2020-9-17 13:19 | 只看该作者
    shouji6406 发表于 2020-9-16 10:37
    先支持再慢慢学习

    进收藏夹吃灰(手动狗头)
  • TA的每日心情
    开心
    2020-9-30 15:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    5#
    发表于 2020-9-29 16:11 | 只看该作者
    有个疑问:既然你是美的的空调,那为什么不用美的的头文件和类名呢?
  • TA的每日心情
    慵懒
    2020-9-30 09:16
  • 签到天数: 187 天

    [LV.7]常住居民III

    6#
     楼主| 发表于 2020-9-29 16:49 | 只看该作者
    han_sir 发表于 2020-9-29 16:11
    有个疑问:既然你是美的的空调,那为什么不用美的的头文件和类名呢?

    这个我上面有说的,用美的  的 空调没有反应,后来查出来是COOLIX 这个,这其实也是美的 的一个品牌
  • TA的每日心情
    开心
    2020-9-30 15:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    7#
    发表于 2020-9-30 08:54 | 只看该作者
    王尼玛1 发表于 2020-9-29 16:49
    这个我上面有说的,用美的  的 空调没有反应,后来查出来是COOLIX 这个,这其实也是美的 的一个品牌 ...

    你上面说的是你美的的空调,用的格力的头文件改成美的的,但是库里直接就有美的的头文件啊!你没有说库里的美的的头文件能不能用啊!
  • TA的每日心情
    开心
    2020-10-1 14:54
  • 签到天数: 553 天

    [LV.9]以坛为家II

    8#
    发表于 2020-9-30 11:41 | 只看该作者

    代码给你们搬过来




    1. #define BLINKER_WIFI
    2. #define BLINKER_ESP_SMARTCONFIG
    3. #define IRPIN   3    //红外二极管引脚
    4. #define DHTPIN  2   //DHT11引脚
    5. #define DHTTYPE   DHT11 //DHT类型,我用的是DHT11

    6. #define Slider_1 "ran-6i6" //温度滑动条
    7. #define Slider_2 "ran-z8p" //风速滑动条

    8. #define BUTTON_1 "btn-8bg" //电源按键
    9. #define BUTTON_2 "btn-doa" //自动按键
    10. #define BUTTON_3 "btn-gvv" //制冷按键
    11. #define BUTTON_4 "btn-kop" //制热按键

    12. #include <Blinker.h>
    13. #include <ESP8266WiFi.h>
    14. #include <IRremoteESP8266.h>
    15. #include <IRsend.h>  
    16. #include <DHT.h>

    17. //根据你的空调牌子更改头文件,头文件在你的Arduino安装目录下的 libraries ->  IRremoteESP8266 -> src
    18. //例如你的是美的 的 就放 美的 的头文件
    19. #include <ir_Coolix.h>     //这是美的在德国的一个牌子

    20. IRCoolixAC Midea(IRPIN);  //实例化一个空调对象

    21. BlinkerButton Button1(BUTTON_1);
    22. BlinkerButton Button2(BUTTON_2);
    23. BlinkerButton Button3(BUTTON_3);
    24. BlinkerButton Button4(BUTTON_4);
    25. BlinkerSlider Slider1(Slider_1);
    26. BlinkerSlider Slider2(Slider_2);
    27. BlinkerNumber HUMI("num-2yc");
    28. BlinkerNumber TEMP("num-2cz");

    29. DHT dht(DHTPIN, DHTTYPE);

    30. char auth[] = "**************"; //你的设备密钥
    31. float humi_read, temp_read;
    32. uint32_t read_time = 0;
    33. int32_t tem_value;
    34. int32_t fan_value;
    35. /* 电源按键按下时的回调函数 */
    36. void button1_callback(const String & state)
    37. {
    38.    
    39.     BLINKER_LOG("get button state: ", state);

    40.       if (state == BLINKER_CMD_ON) {
    41.         BLINKER_LOG("Toggle on!");
    42.         Midea.on();
    43.         Midea.send();
    44.         Button1.color("#FF0000");
    45.         Button1.print("on");
    46.     }
    47.    if (state == BLINKER_CMD_OFF) {
    48.         BLINKER_LOG("Toggle off!");
    49.         Midea.off();
    50.         Midea.send();
    51.         Button1.color("#000000");
    52.         Button1.print("off");
    53.     }
    54. }

    55. /* 自动按键按下时的回调函数 */
    56. void button2_callback(const String & state)
    57. {
    58.   Midea.setMode(2);
    59.   Midea.send();
    60.   Button2.color("#FF0000");
    61.   Button2.print();
    62.   Button3.color("#000000");
    63.   Button3.print();
    64.   Button4.color("#000000");
    65.   Button4.print();
    66. }
    67. /* 制冷按键按下时的回调函数 */
    68. void button3_callback(const String & state)
    69. {
    70.   Midea.setMode(0);
    71.   Midea.send();
    72.   Button3.color("#0000FF");
    73.   Button3.print();
    74.   Button2.color("#000000");
    75.   Button2.print();
    76.   Button4.color("#000000");
    77.   Button4.print();
    78. }
    79. /* 制热按键按下时的回调函数 */
    80. void button4_callback(const String & state)
    81. {
    82.   Midea.setMode(3);
    83.   Midea.send();
    84.   Button4.color("#FF0000");
    85.   Button4.print();
    86.   Button2.color("#000000");
    87.   Button2.print();
    88.   Button3.color("#000000");
    89.   Button3.print();

    90. }


    91. /* 滑动温度滑动条时 执行的函数 */
    92. void slider1_callback(int32_t value)
    93. {
    94.     BLINKER_LOG("get slider value: ", value);
    95.     tem_value = value;
    96.     Midea.setTemp(value);
    97.     Midea.send();
    98. }
    99. /* 滑动风速滑动条时 执行的函数 */
    100. void slider2_callback(int32_t value)
    101. {
    102.     BLINKER_LOG("get slider value: ", value);
    103.     fan_value = value;
    104.     Midea.setFan(value-1);
    105.     Midea.send();
    106. }

    107. void dataRead(const String & data)
    108. {
    109.     BLINKER_LOG("Blinker readString: ", data);

    110.     Blinker.vibrate();
    111.    
    112.     uint32_t BlinkerTime = millis();
    113.    
    114.     Blinker.print("millis", BlinkerTime);
    115. }

    116. /*心跳包函数*/
    117. void heartbeat()
    118. {
    119.   bool flag = Midea.getPower();
    120.      if(flag) {  Button1.color("#FF0000"); Button1.print("on"); }
    121.      else {Button1.color("#000000"); Button1.print("on");}
    122.     HUMI.print(humi_read);
    123.     TEMP.print(temp_read);
    124.     Slider1.color("#FFD700");
    125.     Slider1.print(tem_value);
    126.     Slider2.color("#FFD700");
    127.     Slider2.print(fan_value);
    128. }

    129. void setup() {
    130.   Midea.begin();
    131.   Serial.begin(115200);
    132.   BLINKER_DEBUG.stream(Serial);
    133.   pinMode(IRPIN,OUTPUT);
    134.   pinMode(DHTPIN,INPUT);
    135.   digitalWrite(IRPIN,LOW);
    136.    
    137.   Blinker.begin(auth);
    138.   Blinker.attachData(dataRead);
    139.   Blinker.attachHeartbeat(heartbeat);
    140.   Button1.attach(button1_callback);
    141.   Button2.attach(button2_callback);
    142.   Button3.attach(button3_callback);
    143.   Button4.attach(button4_callback);
    144.   
    145.   
    146.   Slider1.attach(slider1_callback);
    147.   Slider2.attach(slider2_callback);
    148. }


    149. void loop() {
    150.   
    151.   Blinker.run();
    152.       if (read_time == 0 || (millis() - read_time) >= 2000)
    153.     {
    154.         read_time = millis();

    155.         float h = dht.readHumidity();
    156.         float t = dht.readTemperature();        

    157.         if (isnan(h) || isnan(t)) {
    158.             BLINKER_LOG("Failed to read from DHT sensor!");
    159.             return;
    160.         }

    161.         float hic = dht.computeHeatIndex(t, h, false);

    162.         humi_read = h;
    163.         temp_read = t;
    164.     }
    165.   
    166. }
    复制代码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    关于第三方IDE
    关于第三方IDE
    刚开始玩esp8266,用arduino做了几个例子,太蛋疼,开始找第三方ide,目前只研究了vsc
    arduino蓝牙接口串口显示为乱码
    arduino蓝牙接口串口显示
    各位看一下代码,我这串口无论怎么改,通过手机发送信息都是乱码。 #include
    开源!白菜白光T12控制器 全新UI界面
    开源!白菜白光T12控制器
    *声明:本项目源于https://github.com/wagiminator/ATmega-Soldering-Station 采用CC3
    关于arduino端口问题,萌新求助帖
    关于arduino端口问题,萌
    已经下好了 arduino的ide 可以从设备管理器看到 连接的板的名称, 但是不能从ide中找
    ESP8266烧录错误
    ESP8266烧录错误
    -首先-ESP8266新手 使用Arduino IDE Mac版开发, 对eps8266进行例程对烧录,总是报错
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表