zoukankan      html  css  js  c++  java
  • esp8266物联网开发二:Arduino名门正派

    由于micropython网上资料挺少,整体用起来挺费力,而且很多软硬件厂商并不会把重心放到micropython上,所以决定使用arduino ide和C语言配合来进行,开始吧。

    1. arduino环境配置

    首先,需要下载arduino ide压缩包并进行安装,可以去arduino官网找到我们需要的版本,然后进行安装,这里不再过多描述。

    然后,需要添加ESP8266的配置,由于文件在国外,需要翻墙,可以参考此文章中的链接进行:https://www.arduino.cn/thread-76029-1-1.html

    一切都安装好之后,看到的界面如下:

    之后就可以进行正常的编码了。

    注意,串口监视器功能,如果配置不好,会有乱码存在的可能,这时候需要做如下的设置来解决乱码:

    首先,把电脑字体为clearType字体的勾去掉,可以去控制面板里面找。

    其次,烧写的波特率要和串口监视器的波特率设置的一样。

     2. 通过继电器连接小爱同学操作LED

    相信大家在网上看到很多的例子了。我这里也做成功了,具体来说一下过程吧。

    首先,去点灯科技网站,下载其Blinker库,并将下载的库解压后,放到C:UserssscyDocumentsArduinolibraries文件夹中,整体如下:

    然后,书写代码,使得可以通过wifi控制继电器开关LED,具体的函数api讲解,请点击:https://arduino-esp8266.readthedocs.io/en/latest/reference.html,相关github:https://github.com/esp8266/Arduino

    #define BLINKER_WIFI
    #define BLINKER_MIOT_LIGHT//支持小爱同学
    #include <Blinker.h>
    
    char auth[] = "xxxxxxx";//app中获取到的Secret Key(密钥)
    char ssid[] = "cxsr";
    char pswd[] = "scy251147";
    
    int GPIO = 16; //定义继电器输入引脚为GPIO/0
    
    // 新建组件对象
    BlinkerButton ButtonOpen("btn-open");
    BlinkerButton ButtonClose("btn-close");
    
    // 按下BlinkerAPP按键即会执行该函数
    void ButtonOpen_callback(const String & state) {
        BLINKER_LOG("get button state: ", state);
        digitalWrite(GPIO, 1);
        Blinker.vibrate();
    }
    
    void ButtonClose_callback(const String & state) {
        BLINKER_LOG("get button state: ", state);
        digitalWrite(GPIO, 0);
        Blinker.vibrate();
    }
    
    void miotPowerState(const String & state)
    {
        BLINKER_LOG("need set power state: ", state);
    
        if (state == BLINKER_CMD_ON) {
            digitalWrite(GPIO, 1);
    
            BlinkerMIOT.powerState("on");
            BlinkerMIOT.print();
        }
        else if (state == BLINKER_CMD_OFF) {
            digitalWrite(GPIO, 0);
    
            BlinkerMIOT.powerState("off");
            BlinkerMIOT.print();
        }
    }
    
    // 如果未绑定的组件被触发,则会执行其中内容
    void dataRead(const String & data)
    {
        BLINKER_LOG("Blinker readString: ", data);
    }
    
    void setup() {
        // 初始化串口,并开启调试信息,调试用可以删除
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
        // 初始化IO
        pinMode(GPIO, OUTPUT);
        digitalWrite(GPIO, HIGH);
        
        // 初始化blinker
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
        
        ButtonOpen.attach(ButtonOpen_callback);
        ButtonClose.attach(ButtonClose_callback);
    
        BlinkerMIOT.attachPowerState(miotPowerState);
    
    }
    
    void loop() {
        Blinker.run();
    }

     然后,按照上面给的链接,安装好点灯APP,进入设置,创建自己的设备,然后会获得分配的密匙,此密匙写到程序中的auth数组变量中。同时需要注意的是,开灯按钮的名称要为 btn-open, 关灯按钮的名称要为 btn-close。整体设置完毕之后的图示如下:

    设置完毕之后,我们通过arduino ide,设置好芯片,然后烧写到硬件中,编译过程中一些warn提示不必管,直接看最后编译结果,注意红圈部分:

     烧写完毕,重置硬件上的reset按钮,同时打开串口监视器,可以看到已经自动联网了:

     此时,打开点灯app,可以看到设备上线了:

     然后点进去操作打开和关闭灯的按钮,可以看到灯能被正常的打开关闭了,说明我们的设备上MQTT服务器是ok的。

    3. 接入小爱同学

    首先,打开米家APP,在我的->其他平台设备中,找到点灯科技,然后将设备同步过来,同步完毕后,关闭米家。

    然后,打开小爱同学APP,在训练计划中,添加我的训练,如下图所示:

    添加完毕,就可以尝试使用小爱同学语音操作了,比如唤醒小爱同学后,说开灯,然后就会发现灯亮了,说关灯,然后就会发现灯灭了:

    是不是很酷炫呢?

    最后说明一下,之所以能网控LED,是因为点灯科技提供了MQTT服务端做指令转发,使得通过小爱同学发出的指令,通过点灯科技的MQTT服务端下发给了点灯科技的Blink.h中的MQTT客户端,然后客户端由于订阅了按钮点击事件,所以才能触发开关灯操作。

    MQTT具体细节,我接下来的文章会讲到,今天到这里吧,期望能够抛砖引玉。

    来个最终照片吧,绿灯是继电器指示灯,白长条灯才是被控灯:

  • 相关阅读:
    【转】多线程:深入了解线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)
    Mono初接触
    计算机颜色格式( 8位 16位 24位 32位色)
    我爱源代码
    Linux小白教程: tar的几种常用格式
    Linux小白教程:查看当前Linux的发行版本、内核(kernel)版本
    10大糟糕预测:
    一日编程小悟
    Linux小白教程:vi(shell文本编辑器)保存、退出命令
    C结构体中的函数指针与函数
  • 原文地址:https://www.cnblogs.com/scy251147/p/12727697.html
Copyright © 2011-2022 走看看