zoukankan      html  css  js  c++  java
  • 利用DoHome APP和音箱控制LED灯实验参考步骤

    准备材料:

    Arduino Uno 一块               

    Arduino 扩展板        购买链接

    DT-06模块一个       购买链接

    安卓手机一个

    小度音箱一个

    小灯珠一个

    杜邦线若干

    1.DT-06固件的烧录

    1.1打开ESP模块下载工具ESPFlashDownloadTool,选择需要下载的固件,填写下载地址,推荐使用  ESP8266 Download TOOL,配置信息如下:

    1.2 选择实际的串口,选择下载速度

    1.3点击ERASE,先插除,再点击START,开始下载

    工具下载及详细请看:http://bbs.doit.am/forum.php?mod=viewthread&tid=208

    DT-06固件.bin文件下载链接

    2.硬件电路的连接

    小灯珠的R———arduino扩展板D2口

    小灯珠的G———arduino扩展板D3口

    小灯珠的B———arduino扩展板D4口

    小灯珠的GND———arduino扩展板GND

    DT-06安装到arduino扩展板的串口排插位置

    3.DT-06通讯协议

    通信方式:串口通讯

    波特率:115200,无奇偶校验,8位数据位,1位停止位

    每条命令以 结尾。

    3.1、控制命令

    3.1.1 DT06->arduino

    cmd=ctrl&message=power_off|r|g|b|w|m

    power_off表示开关灯操作,0表示关,1表示开

    r,g,b,w,m几个字段分别表示红、绿、蓝、白、暖光的颜色值,颜色值取值范围是0~5000

    3.1.2 Arduino->DT06

    cmd=ctrl&ok;

    3.2、上传状态

    3.2.1 Arduino->DT06

    上传基本状态

    cmd= stat&status= soft_power

    cmd=stat代表基本状态  50s传一次

    上传扩展状态

    cmd=ext_stat&status=r|g|b|w|m

    cmd=ext_stat 代表扩展状态  60s传一次

    3.2.2 DT06->arduino

    基本状态:cmd=stat& ok

    扩展状态:cmd=ext_stat&ok

    4.Arduino UNO 程序的编写

    //材料:UNO+DT06
    #include <EEPROM.h>
    
    /****************************IO引脚定义*****************************/
    
    #define MAX_PACKETSIZE  512
    
    #define DataSerial         Serial
    
    #define PWM_R     2
    #define PWM_G     3
    #define PWM_B     4
    #define PWM_W     5
    #define PWM_M     6
    
    //#define DebugSerial     Serial1
    struct config_type
    {
        uint8_t ledswitch;
        uint16_t r;
        uint16_t g;
        uint16_t b;
        uint16_t w;
        uint16_t m;
    };
    
    config_type config;
    
    //uartdata
    char buffUart[MAX_PACKETSIZE];
    unsigned int buffUartIndex = 0;
    unsigned long preUartTick = 0;
    int eeAddress = 0;
    
    char strStat[64] = {0};
    char strExtStat[128] = {0};
    
    /*
       保存参数到EEPROM
    */
    void saveConfig()
    {
        DataSerial.println("-----Save config-----");
        DataSerial.print("ledswitch:");
        DataSerial.print(config.ledswitch);
        DataSerial.print(",r:");
        DataSerial.print(config.r);
        DataSerial.print(",g:");
        DataSerial.print(config.g);
        DataSerial.print(",b:");
        DataSerial.print(config.b);
        DataSerial.print(",w:");
        DataSerial.print(config.w);
        DataSerial.print(",m:");
        DataSerial.println(config.m);
        DataSerial.println("-------------------");
    
        EEPROM.put(eeAddress, config);
    }
    
    /*
       从EEPROM加载参数
    */
    void loadConfig()
    {
        EEPROM.get(eeAddress, config);
        DataSerial.println("-----Read config-----");
        DataSerial.print("ledswitch:");
        DataSerial.print(config.ledswitch);
        DataSerial.print(",r:");
        DataSerial.print(config.r);
        DataSerial.print(",g:");
        DataSerial.print(config.g);
        DataSerial.print(",b:");
        DataSerial.print(config.b);
        DataSerial.print(",w:");
        DataSerial.print(config.w);
        DataSerial.print(",m:");
        DataSerial.println(config.m);
        DataSerial.println("-------------------");
    }
    
    
    //定时上传状态
    void doUploadStatus()
    {
        static uint32_t uploadTimeTick = 0;
        static uint8_t stat_cnt = 0;
        static uint8_t ext_stat_cnt = 0;
        if (millis() - uploadTimeTick >= 1000) {
            uploadTimeTick = millis();
            stat_cnt++;
            ext_stat_cnt++;
            if (stat_cnt >= 50) {
                stat_cnt = 0;
                sprintf(strStat,"cmd=stat&status=%d
    ",config.ledswitch);
                sendUART(strStat);
            }
            if (ext_stat_cnt >= 60) {
                ext_stat_cnt = 0;
                sprintf(strExtStat,"cmd=ext_stat&status=%d|%d|%d|%d|%d
    ",config.r,config.g,config.b,config.w,config.m);
                sendUART(strExtStat);
            }
        }
    }
    
    
    /*
      检查串口是否有数据
    */
    void doUartTick()
    {
        if (DataSerial.available() > 0)
        {
            uint8_t t = DataSerial.read();
            buffUart[buffUartIndex++] = t;
    
            preUartTick = millis();
            if (buffUartIndex >= MAX_PACKETSIZE - 1) {
                buffUartIndex = MAX_PACKETSIZE - 2;
                preUartTick = preUartTick - 100;
            }
        }
        if (buffUartIndex > 0 && (millis() - preUartTick >= 200))
        {    //data ready
            buffUart[buffUartIndex] = 0x00;
            //DataSerial.flush();
            parseUartPackage(buffUart, buffUartIndex);
            buffUartIndex = 0;
        }
    }
    
    //处理串口数据
    void parseUartPackage(char *p, size_t len)
    {
        DataSerial.println("parseUartPackage");
        DataSerial.println(p);
        char * s = NULL, *e = NULL;
        char power[8]; memset(power, 0x00, sizeof(power));
        char r[8]; memset(r, 0x00, sizeof(r));
        char g[8]; memset(g, 0x00, sizeof(g));
        char b[8]; memset(b, 0x00, sizeof(b));
        char w[8]; memset(w, 0x00, sizeof(w));
        char m[8]; memset(m, 0x00, sizeof(m));
        if (strstr(p, "cmd=ctrl") != NULL) {
            s = strstr(p, "message=");
            if (s == NULL) return;
            e = strstr(s, "|");
            if (e == NULL) return;
            memcpy(power, s + strlen("message="), e - s - strlen("message="));
            s = strstr(e + 1, "|");
            if (s == NULL) return;
            memcpy(r, e + 1, s - e - 1);
            e = strstr(s + 1, "|");
            if (e == NULL) return;
            memcpy(g, s + 1, e - s - 1);
            s = strstr(e + 1, "|");
            if (s == NULL) return;
            memcpy(b, e + 1, s - e - 1);
            e = strstr(s + 1, "|");
            if (e == NULL) return;
            memcpy(w, s + 1, e - s - 1);
            s = strstr(e, "
    ");
            if (s == NULL) return;
            memcpy(m, e + 1, s - e - 1);
            config.ledswitch = atoi(power);
            config.r = atoi(r);
            config.g = atoi(g);
            config.b = atoi(b);
            config.w = atoi(w);
            config.m = atoi(m);
            ctrlLED(config.r,config.g,config.b,config.w,config.m);
            saveConfig();
        }
    }
    
    
    /*
      * 发送数据到串口
     */
    void sendUART(char *p, size_t len)
    {
        DataSerial.println("[send to UART:]char*");
        DataSerial.println(p);
        DataSerial.write((uint8_t*)p, len);
        delay(50);
    }
    
    /*
      * 发送数据到串口
     */
    void sendUART(char *p)
    {
        DataSerial.println("[send to UART:]string");
        DataSerial.println(p);
        DataSerial.print(p);
        delay(50);
    }
    
    //控制LED
    void ctrlLED(uint16_t r,uint16_t g,uint16_t b,uint16_t w,uint16_t m)
    {
        analogWrite(PWM_R, r);
        analogWrite(PWM_G, g);
        analogWrite(PWM_B, b);
        analogWrite(PWM_W, w);
        analogWrite(PWM_M, m);
    }
    
    //初始化LED
    void initLED()
    {
        pinMode(PWM_R, OUTPUT);
        pinMode(PWM_G, OUTPUT);
        pinMode(PWM_B, OUTPUT);
        pinMode(PWM_W, OUTPUT);
        pinMode(PWM_M, OUTPUT);
        ctrlLED(config.r,config.g,config.b,config.w,config.m);
    }
    
    void setup()
    {
        //DebugSerial.begin(115200);
        DataSerial.begin(115200);
        loadConfig();
        initLED();
    }
    
    void loop()
    {
        doUartTick();
        doUploadStatus();
    }

    注意:

    (1)上传arduino程序需先断开DT-06模块的连接,程序上传完成后再插上DT-06模块

    arduino UNO控制程序代码:下载地址

    5.功能测试

    5.1 DT-06与手机DoHome App 的连接

    5.1.1扫描下面二维码(注意用浏览器扫描,不要用微信)或直接访问

    http://dohome.doit.am/upgrade/downLoad/downLoad.php 下载

    5.1.2 App安装完成后打开应用,打开左上角配置栏,在“点击登录”处创建和登陆帐户。

     

    5.1.3  点右上角加号添加设备,点击灯具,添加灯具设备

    5.1.4连接附近可用的WIFI,选择设备要连接的网络路由器,并输入正确的网络密码。点击下一步

    5.1.5按照页面说明,返回手机的WLAN设置,连接“DoHome_XXXX”的热点,其密码为“12345678”。注:若有多台设备,请注意区分不同的热点名字。等待设备连接完成100%。

     

    5.2功能调试

    点击APP控制界面为红灯,小灯珠的红色灯亮起

     

    点击APP控制界面为绿灯,小灯珠的绿色灯亮起

     

    点击APP控制界面为蓝灯,小灯珠的蓝灯亮起

     

    点击APP控制界面为关灯,小灯珠熄灭

     

    6.小度音响的连接和远程控制

    在手机应用市场搜索小度音箱app并安装完成打开小度音箱APP

    6.1小度音箱APP添加小度音响设备

    打开手机蓝牙,打开小度音箱APP,点击添加新设备,长按音箱上的三角键,听到音箱提示音后点击下一步

     

    6.2小度音箱APP添加其他平台设备

    6.2.1打开小度音箱APP,点击“智能家居”,然后添加设备,接着在弹出的品牌列表中找到DoHome。

     

    6.2.2选择绑定账号,输入DoHome APP的绑定账号信息(注意是在第5节关于创建和注册的DoHome账号)。返回智能家居主页面,刷新可以得到该账号下的设备列表。

     

    6.2.3现在您已经可以使用小度音响控制您的设备了。同时,小度音箱在“设备详情”菜单下支持分组功能。

     

    小度支持的部分指令如下(以插座为例):

    • 打开 [设备名字]
    • 关闭 [设备名字]

    6.3 小度音箱语音远程控制继电器

    对小度说打开门口插座,继电器 的红色开关指示灯亮起

    对小度说关闭门口插座,继电器 的红色开关指示灯熄灭

    7.天猫精灵的连接和远程控制

    7.1天猫精灵APP添加音响设备

    7.1.1  在各大应用市场搜索天猫精灵app并安装以华为为例

     

    7.1.2 打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的音响设备类型-》选择路由器-》长按音响上的静音键点击开始连接

     

    7.2天猫精灵APP添加其他平台设备

    第一步:打开天猫精灵APP,点击“我的”,然后添加智能设备,接着在左侧列表中选择您的设备类型。

     

    第二步:右上角搜索“DoHome”,并在链接的页面中输入您的DoHome 账号信息,完成天猫精灵与DoHome之间的链接。

     

    第三步:此时,天猫精灵APP中,已经出现该账号下的所有设备。您可以选取特定设备,进行重新命名,例如“客厅的台灯”等等。现在您可以使用天猫精灵控制设备了。

     

    天猫精灵支持的部分指令(以插座为例):

    • 打开 [设备名字]
    • 关闭 [设备名字]

    7.3 天猫精灵语音远程控制继电器

    对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起

    对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭

     

    8.小米音箱的连接和远程控制

    8.1米家APP添加小爱音响设备

    8.1.1在各大应用市场搜索米家app并安装以华为为例

     

    8.1.2  打开小爱音箱,长按音箱上三角形按键听到语音提示:已进入配对模式。手机打开蓝牙,打开米家APP点击添加设备-->附近设备,搜索到设备连接,接着选择路由器下一步即可

     

    8.2米家APP添加其他平台设备

    第一步:打开米家APP,点击“我的”,然后选择“其他平台设备”。

     

    第二步:点击添加,在弹出的列表中,找到“四博智联”。选择绑定账号,输入DoHome APP的绑定账号信息。

     

    第三步:现在您已经可以使用小爱同学控制您的设备了。

    小爱支持的部分指令如下(以插座为例):

    • 打开 [设备名字]
    • 关闭 [设备名字]

    8.3 小米音箱语音远程控制继电器

    对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起

    对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭

     

  • 相关阅读:
    Mysql 设置变量的几种方式
    Mysql Alter table 操作
    Truncate有外键约束的表
    Mysql ESCAPE 用法
    Jquery checkbox operation
    Mysql 根据URL获取顶级域名
    MySQL分区表操作
    TIB工作室动态今后将发布在 http://www.automationqa.com/ , 敬请关注!
    TestPartner资源列表
    如何开始学习一个自动化测试工具?
  • 原文地址:https://www.cnblogs.com/doiting/p/11136853.html
Copyright © 2011-2022 走看看