利用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 小米音箱语音远程控制继电器
对天猫精灵说打开门口插座,继电器 的红色开关指示灯亮起
对天猫精灵说关闭门口插座,继电器 的红色开关指示灯熄灭
利用DoHome APP和音箱控制LED灯实验参考步骤的更多相关文章
- 利用DoHome APP和音箱控制小车的实验参考步骤
准备材料: Arduino Uno 一块 Arduino 扩展板 购买链接 DT-06模块一个 购买链接 安卓手机一个 小度音箱一个 小车一个 杜邦线若干 1.DT-06固件 ...
- 利用DoHome APP和音箱控制继电器通断电实验参考步骤
准备材料: Arduino Uno 一块 Arduino 扩展板 购买链接 DT-06模块一个 购买链接 安卓手机一个 小度音箱一个 继电器模块一个 杜邦线若干 1.DT-0 ...
- BLE 安卓APP控制LED灯的实现(转)
源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...
- 云中树莓派(4):利用声音传感器控制Led灯
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- arduino 红外遥控器控制LED灯
/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...
- arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
- enc28J60 网页控制LED灯
软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...
随机推荐
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- 宏旺半导体深度剖析嵌入式存储芯片eMMC原理 一篇概括大全
eMMC 一直是嵌入式存储市场最主流的选择,除了读写速度快.性价比高外,在节省空间方面也是相当优秀,今天宏旺半导体就和大家详细聊聊eMMC. eMMC 是 embedded MultiMediaCar ...
- 统计greenplum_postgresql数据占用存储情况
1. 场景描述 因项目数据量略大,每天大概有几百g的存储需求,并且是多项目公用greenplum集群,需要定期检查一下磁盘情况. 2. 解决方案 2.1 按用户/项目统计 2.1.1 SQL语句 SE ...
- 【学习笔记】动态规划—斜率优化DP(超详细)
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...
- MyBatis where、set、trim标签的用法
<!-- 4.3.1 where用法 <where>标签的作用:如果该便签包含的元素中有返回值,就插入一个where:如果 where后面的字符串是一and或or开头的,就将它们剔除 ...
- Java编程思想:序列化深层部分
import java.io.*; import java.util.ArrayList; import java.util.List; public class Test { public stat ...
- 简单web网页与SSM后台交互
简单web网页与SSM后台交互 情况说明 如今,已经搭建好SSM后台开发环境,并且可以经由postman工具测试成功.现在尝试写出web前端网页,通过实现简单的提交.注册.查询功能来加深对前后端数据传 ...
- 【MySQL】(七)事务
我的个人博客 http://www.haxianhe.com/ 数据库系统引入事务的主要目的:事务会把数据库从一种状态转换为另一种一致状态.在数据库提交工作时,可以确保要么所有修改都已经保存了,要么所 ...
- DEDECMS教程:织梦栏目更新HTML出现“模板文件不存在,无法解析文档”的解决方法(转)
- TP框架基础(三)
[系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: >系统常量信息里经常用到的是user里的路径 > APP_PATH =>string'./shop/' 项目路 ...