利用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位停止位

每条命令以\r\n结尾。

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\r\n",config.ledswitch);
            sendUART(strStat);
        }
        if (ext_stat_cnt >= 60) {
            ext_stat_cnt = 0;
            sprintf(strExtStat,"cmd=ext_stat&status=%d|%d|%d|%d|%d\r\n",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, "\r\n");
        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 小米音箱语音远程控制继电器

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

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

原文地址:https://www.cnblogs.com/doiting/p/11136853.html

时间: 2024-08-11 03:03:21

利用DoHome APP和音箱控制LED灯实验参考步骤的相关文章

利用DoHome APP和音箱控制小车的实验参考步骤

准备材料: Arduino Uno 一块 Arduino 扩展板        购买链接 DT-06模块一个       购买链接 安卓手机一个 小度音箱一个 小车一个 杜邦线若干 1.DT-06固件的烧录 1.1打开ESP模块下载工具ESPFlashDownloadTool,选择需要下载的固件,填写下载地址,推荐使用  ESP8266 Download TOOL,配置信息如下: 1.2 选择实际的串口,选择下载速度 1.3点击ERASE,先插除,再点击START,开始下载 工具下载及详细请看:

BLE 安卓APP控制LED灯的实现(转)

源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final BluetoothManager bluetoothManager =(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bluetoothManager.getAdapter(); //

云中树莓派(4):利用声音传感器控制Led灯

云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感器控制Led灯 1. 声音传感器及其配置 声音传感器如下图所示: 将 VCC 引脚接入树莓派 5V 引脚,将 GND 引脚接入树莓派 GND 引脚,将 OUT 引脚接入树莓派 GPIO20. 要注意,模块在环境声音强度达不到设定阈值时,OUT输出高电平(1),当外界环境声音强度超过设定阈值时,模块O

socket通信——多角度控制LED灯亮灭

今天以物联网网关(网关链接)以服务器,在多个客户端就做一个非常简单的功能:点亮或熄灭网关上的LED灯.目前想到了三种方式,分别是:TCP&UDP测试工具.自编Java客户端和Mono Android客户端.相信这会很有意思的. 1.服务器端 在使用或编写客户端之前,首先来看看服务器端代码,其专门通过串口烧进网关内部 OutputPort led = new OutputPort((Cpu.Pin)GPIO_NAMES.PF8, false); Socket sc; Socket ss = new

enc28J60 网页控制LED灯

软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino的安装目录所在的库文件夹下:D:\Program Files (x86)\Arduino\libraries,并且重命名为EtherCard 2.打开Arduino 复制相关代码,保存,编译,上传. 3.设置电脑ip为192.168.2.2 4.浏览器登录192.168.2.1 参考: lucade

嵌入式Linux学习入门:控制LED灯

记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-GPF6对应nLED_1, nLED_2, nLED_4, 所以代码里面操作GPF4-GPF6就可以控制LED灯亮灭. 2.写代码前了解事项 第一步:将GPF0-GPF4配置为输出功能 第二步:控制GPF0-GPF4输出低电平 3.编写代码 1 .text 2 .global _start 3 _st

arduino入门学习实现语音控制LED灯

需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val int ledpin=10;//定义数字接口13 void setup() { Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致.当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致. pinMode(ledpin,OUTPUT);//设置数字10

arduino 红外遥控器控制LED灯

/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁 元件: 跳线公公头 * 5 led, 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3, GND, 5V LED 负极接GND 正极串联电阻接 IO5 红外1-9口编码: FF30CF 1 FF18E7 2 FF7A85 3 FF10EF 4 FF38C7 5 FF5AA5 6 FF42BD 7 FF4AB5 8 FF52AD 9 参考:http://www.arduino.cn/threa

外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )

转帖: http://www.oschina.net/question/565065_115196?sort=time 实验目的: mini2440开发板上有6个按键,将其中的前4个按键设为外部中断方式,当按下K1时,LED1亮:当按下K2时,LED2亮:当按下K3时,LED3亮:当按下K4时,LED4亮. 首先我们先了解一下 mini2440 按键和LED接口:     GPBCON 地址: 0x56000010 (LED 灯可以参考流水灯的随笔) 按键接口电路如图2所示,当按键没有按下时,G