分享到:
一 项目简介
睡前给小朋友讲故事,哄自己的宝贝睡觉,已经成为很多家长的沉重负担,特别是很多女性,既要在外面拼搏,又要负责繁重的家务,好不容易想躺一下,不通情达理的心肝宝贝吵着听故事,真累!
这款智能设备可以为您分忧解难:通过ardiuno min单片机,语音模块,RGBLED模块,机智云平台,用手机作为控制界面,随心所欲地控制一个深受小朋友喜爱的,能播放故事,音乐,还能发出五彩缤纷,变幻莫测的灯光,秒杀小主人的无理要求,让你瞬间从纠缠中解脱出来。
二 硬件准备
改装前的硅胶玩具
改装后的语音播放彩灯系统
分解后的模块
完全肢解后的零部件
三 软件开发环境以及工具
(1)单片机
1)代码编辑:Notepad++
2)编译工具:Arduino IDE
3)烧写工具:OpenJumper
(2)固件烧写工具
ESP_DOWNLOAD_TOOL_V2.4
(3)手机测试用Demo App
请到机智云物联网云平台下载,与本系统配置绑定后立刻可以控制体验。
四 控制思路
(1)主机
1)主机MCU1 专注与云端和从机的通信,把采集,处理后的数据发送到相应的设备。
2)数据点 开关类:启动/停止播放或灯光,数据类型:布尔值。选项类:确定被控制对象的多项模式,数据类型:枚举。模拟类:对连续变化变量控制,数据类型:数值。详细数据内容请参阅下表:
(2)从机
1)语音专用模块MCU2 专注于解析从主机发来的数据包,依据自身规定的命令集,发挥语音模块丰富的功能,使用方法请参阅附件“N9200 MP3模块说明书(不带配置)v1.3”。
2)彩灯控制器MCU3 通过开源的Adafruit_NeoPixel函数库,控制WS2812B彩灯模块发出五颜六色的绚丽光彩。
五 代码说明
(1)使用机智云的代码自动生成工具,方法请参阅bigfanofloT老师的“史上最详细的Arduino uno R3接入机智云教程”一文。
(2)主机代码
1)WiFi配置用代码的修改
复制代码
作为配置状态的显示手段,WS2812B 16通道RGBLED灯分别在SOFTAP模式时,点亮红色,AIRLINK模式时,点亮绿色,成功时关闭所有通道的灯。
2)语音模块控制代码
语音模块的指令集比较多,这里只简单说明几个数据包如何发送,其他都大同小异,主机完整代码里面有详细的注释,请参阅为盼。下面我们根据厂家提供的N9200B语音模块的部分指令集,说明一下如何添加这部分的逻辑代码:
①首先需要定义一个多维数组“unsigned char data[7] = {0,0,0,0,0,0,0};”,用于储存语音数据包。然后根据不同的指令,把16进制的数据添加到下面各个函数的数组中,其中播放,暂停,上一目录的数据都是常量,只有音量的第二组数据为变量v,由于校验和w,表示除了校验和本身之外,所有字节之和,所以校验和也成了变量w。
②然后创建播放Control_Play(),暂停Control_Pause(),上一目录Control_Back_dir()以及音量控制Control_Volume()4个函数,这样在各个逻辑代码区域就可以调用了。
复制代码
③函数的调用
因为音乐控制需要用到变量,下面我们详细说明一下如何调用音量控制函数对音量进行控制。其他函数的调用大同小异,请举一反三,与此类推。
(myGizwits.hasBeenSet(EVENT_Volume)),myGizwits.read(EVENT_Volume,&varR_Volume);都是机智云自动生成的代码,用于读取云端的数据,我们只管使用就行。
上面介绍过,语音模块厂家的音量通信指令格式为(06 F9 02 01 v w),其中,v为音量数据,厂家规定音量等级范围为(0-30),w为校验和,表示除了校验和本身之外,所有字节之和,这里我们有一个更简易的计算方法:w=v+2。下面的第9行代码就是用这个公式计算校验和的。第2-6行代码表示从云端读取音量变量 varR_Volume的数值,并存入v,当音量在规定范围内(0 <= v < 31)时,调用 Control_Volume();,注意函数内的数组unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};,的变量将被替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,(v+2)};,例如:当将手机的音量滑动条移到20等级的音量位置时,v将存入0x14的16进制数据(十进制20的HEX值),数组将替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,0x14,0x16};。 另外其他的二种状态:音量小于0时(v < 0),音量大于最大值时(v > 30)的时候,系统强制限定其回归规定范围内,数组变量替代方法以及调用的函数都大同小异,这里不再累述。
复制代码
3)RGBLED彩灯控制
详细请参阅本文“1)WiFi配置用代码的修改”。
(4)从机代码
1)语音控制模块
模块是市售成品,没有开源资料,只有使用说明书,按照说明书提供的指令集就可以用代码控制了。
2)彩灯控制器
该代码充分利用当下流行的Adafruit_NeoPixel函数库,作为控制主线,读取主机串口的指令字符集,判断相关条件,添加相应代码,完成对WS2812B 16通道RGBLED彩灯模块的控制。详细代码:
①彩灯花样控制代码
花样五花百门,时间关系,我们只介绍“戏剧追逐效果”这部分的代码。
②彩灯花样函数
上面通过例,说明了该系统的部分代码,更详细和完整的内容,请参阅附件的“ardiuno完整代码”。为方便大家分享,附件还添加了电路图,代码,模块,固件烧写包等详细资料,请查阅为盼。鉴于篇幅所限,未能提供更多的说明,这方面的教程,请参阅Genius,admin以及bigfanofloT等老师的文章,里面都有非常详细,非常实用的内容。
感谢大家的关注,如有不妥之处,恳请批评指正。
睡前给小朋友讲故事,哄自己的宝贝睡觉,已经成为很多家长的沉重负担,特别是很多女性,既要在外面拼搏,又要负责繁重的家务,好不容易想躺一下,不通情达理的心肝宝贝吵着听故事,真累!
这款智能设备可以为您分忧解难:通过ardiuno min单片机,语音模块,RGBLED模块,机智云平台,用手机作为控制界面,随心所欲地控制一个深受小朋友喜爱的,能播放故事,音乐,还能发出五彩缤纷,变幻莫测的灯光,秒杀小主人的无理要求,让你瞬间从纠缠中解脱出来。
二 硬件准备
序号 |
名称
|
规格/型号
|
数量
|
1 |
主机
|
arduino Pro Mimi
|
一台
|
2 |
从机
|
Arduino Pro Mimi
|
一台
|
3 |
ESP826WiFi模块
|
ESP-12F
|
一个
|
4 |
语音模块
|
N9200B
|
一个
|
5 |
RGBLED彩灯模块
|
WS2812B 16通道
|
一个
|
6 |
微型音箱
|
8Ω/3W
|
一个
|
7 |
直流过滤器
|
5V/5A
|
一个
|
8 |
WiFi模式配置按钮
|
机械复位
|
一个
|
9 |
滤波电容
|
60V 1uF
|
一个
|
10 |
儿童硅胶玩具
|
萌宠小动物
|
一个
|
11 |
TF卡
|
1G
|
一个
|
改装前的硅胶玩具

改装后的语音播放彩灯系统

分解后的模块

完全肢解后的零部件

三 软件开发环境以及工具
(1)单片机
1)代码编辑:Notepad++
2)编译工具:Arduino IDE
3)烧写工具:OpenJumper
(2)固件烧写工具
ESP_DOWNLOAD_TOOL_V2.4
(3)手机测试用Demo App
请到机智云物联网云平台下载,与本系统配置绑定后立刻可以控制体验。

四 控制思路
(1)主机
1)主机MCU1 专注与云端和从机的通信,把采集,处理后的数据发送到相应的设备。
2)数据点 开关类:启动/停止播放或灯光,数据类型:布尔值。选项类:确定被控制对象的多项模式,数据类型:枚举。模拟类:对连续变化变量控制,数据类型:数值。详细数据内容请参阅下表:
语音彩灯控制系统数据点
|
|||||||||
显示名称
|
标识名
|
读写类型
|
数据类型
|
数值
|
枚举
|
备注
|
|||
分辨率
|
增量
|
数据范围最小值
|
数据范围最大值
|
选项
|
|
||||
开关 |
Switch
|
可写
|
布尔值
|
|
|
|
设备总开关 | ||
播放
|
Play_Pause
|
可写
|
布尔值
|
|
|
|
语音开关 | ||
播放模式
|
Play_Mode
|
可写
|
枚举
|
|
|
全部循环,单循环,随机播放
|
语音播放模式
|
||
播放内容
|
Proj_Select
|
可写
|
枚举
|
|
|
故事会,音乐会
|
播放选项
|
||
单色控制
|
EVENT_LED_COLOR
|
可写
|
枚举
|
|
|
关闭,黄色,紫色,粉色
|
彩灯单色控制
|
||
彩灯花样
|
Scene
|
可写
|
枚举
|
|
|
关闭,涂色效果,戏剧追逐效果,彩虹效果
|
彩灯花样选择
|
||
音量
|
Volume
|
可写
|
数值
|
1
|
0
|
0
|
30
|
|
音量控制 |
选曲模式
|
Control_Mode
|
可写
|
数值
|
1
|
0
|
0
|
40
|
|
播放顺序选择 |
环境温度
|
Temperature
|
只读
|
数值
|
1
|
-13
|
-13
|
187
|
|
备用 |
环境湿度
|
Humidity
|
只读
|
数值
|
1
|
0
|
0
|
100
|
|
备用 |
(2)从机
1)语音专用模块MCU2 专注于解析从主机发来的数据包,依据自身规定的命令集,发挥语音模块丰富的功能,使用方法请参阅附件“N9200 MP3模块说明书(不带配置)v1.3”。
2)彩灯控制器MCU3 通过开源的Adafruit_NeoPixel函数库,控制WS2812B彩灯模块发出五颜六色的绚丽光彩。
五 代码说明
(1)使用机智云的代码自动生成工具,方法请参阅bigfanofloT老师的“史上最详细的Arduino uno R3接入机智云教程”一文。
(2)主机代码
1)WiFi配置用代码的修改
-
void wifiStatusHandle()
-
{
-
//WIFI配置为SOFTAP模式
-
if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
-
{
-
sd_data = 'R';//设置标志字符为“R”
-
Data_Send();//向从机发送点亮RGBLED红色灯指令
-
}
-
//WIFI配置为AIRLINK模式
-
if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
-
{
-
sd_data = 'G';//设置标志字符为“G”
-
Data_Send();//向从机发送点亮RGBLED绿色灯指令
-
}
-
//WIFI配置成功
-
if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
-
{
-
sd_data = 'F';//设置标志字符为“F”
-
Data_Send();//向从机发送关闭RGBLED灯指令
-
}
2)语音模块控制代码
语音模块的指令集比较多,这里只简单说明几个数据包如何发送,其他都大同小异,主机完整代码里面有详细的注释,请参阅为盼。下面我们根据厂家提供的N9200B语音模块的部分指令集,说明一下如何添加这部分的逻辑代码:
N9200B指令(16进制数据) | ||||||
指令名称 |
指令代码
|
反码
|
数据长度
|
数据1
|
数据2
|
校验和
|
播放 |
04
|
FB
|
01
|
01
|
-
|
01
|
暂停 |
04
|
FB
|
01
|
02
|
-
|
02
|
上一曲 |
04
|
FB
|
01
|
04
|
-
|
04
|
音量控制 |
06
|
F9
|
02
|
01
|
VOL
|
04
|
②然后创建播放Control_Play(),暂停Control_Pause(),上一目录Control_Back_dir()以及音量控制Control_Volume()4个函数,这样在各个逻辑代码区域就可以调用了。
-
void Control_Play(){
-
unsigned char data[7] = {0x04,0xfb,0x01,0x01,0x01};//将播放数据包存进数组储存器
-
mySerial1.write(data,7);//将以上数据包发送到语音模块
-
}
-
void Control_Pause(){
-
unsigned char data[7] = {0x04,0xfb,0x01,0x02,0x02}; //将暂停数据包存进数组储存器
-
mySerial1.write(data,7);//将以上数据包发送到语音模块
-
}
-
void Control_Back_dir(){
-
unsigned char data[7] = {0x04,0xfb,0x01,0x12,0x12};//将上一目录数据包存进数组储存器
-
mySerial1.write(data,7);//将以上数据包发送到语音模块
-
}
-
void Control_Volume(){
-
unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};//将音量数据包存进数组储存器
-
mySerial1.write(data,7);//将以上数据包发送到语音模块
- }
因为音乐控制需要用到变量,下面我们详细说明一下如何调用音量控制函数对音量进行控制。其他函数的调用大同小异,请举一反三,与此类推。
(myGizwits.hasBeenSet(EVENT_Volume)),myGizwits.read(EVENT_Volume,&varR_Volume);都是机智云自动生成的代码,用于读取云端的数据,我们只管使用就行。
上面介绍过,语音模块厂家的音量通信指令格式为(06 F9 02 01 v w),其中,v为音量数据,厂家规定音量等级范围为(0-30),w为校验和,表示除了校验和本身之外,所有字节之和,这里我们有一个更简易的计算方法:w=v+2。下面的第9行代码就是用这个公式计算校验和的。第2-6行代码表示从云端读取音量变量 varR_Volume的数值,并存入v,当音量在规定范围内(0 <= v < 31)时,调用 Control_Volume();,注意函数内的数组unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};,的变量将被替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,(v+2)};,例如:当将手机的音量滑动条移到20等级的音量位置时,v将存入0x14的16进制数据(十进制20的HEX值),数组将替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,0x14,0x16};。 另外其他的二种状态:音量小于0时(v < 0),音量大于最大值时(v > 30)的时候,系统强制限定其回归规定范围内,数组变量替代方法以及调用的函数都大同小异,这里不再累述。
-
//音量控制
-
if(myGizwits.hasBeenSet(EVENT_Volume))
-
{
-
myGizwits.read(EVENT_Volume,&varR_Volume);//Address for storing data
-
//收到来自云端的音量控制指令
-
v = varR_Volume;//将云端下发的音量数值存到V
-
if(0 <= v < 31)//音量在规定范围内
-
{
-
w = v + 2;//计算校验和,并将结果存入w
-
Control_Volume();//调用带有当前音量数值的音量控制函数
-
}
-
else if(v < 0)//音量小于0时
-
{
-
v = 0;//强制静音
-
w = v + 2;//计算校验和,并将结果存入w
-
Control_Volume();//调用带有当前音量数值的音量控制函数
-
}
-
else if(v > 30)//音量大于规定值时
-
{
-
v = 30;//强制限定到音量最大值
-
w = v + 2;//计算校验和,并将结果存入w
-
Control_Volume();//调用带有当前音量数值的音量控制函数
-
}
-
}
由于彩灯运行时,CPU一直以循环的方式依次对彩灯做花样模式变换控制,非常“忙绿”,如果这时云端有数据进入,会有点应接不暇,所以我们追加了一个从机,专门负责彩灯“事务”,主机和从机都参与了对彩灯的控制,但是主机只专注于将云端的彩灯控制指令收集,分类后通过串口用字符代号转发给从机,从机利用库函数进行控制。下面我们分析主机的这部分代码。
①彩灯花样模式控制 上面代码的第1-31行,用于彩灯花样控制,varR_Scene用于读取云端彩灯场景变量值,然后通过读取的结果,调用函数。其中Scene_VALUE0-3是机智云根据数据点生成的结构体枚举数据,一共有4个,根据这4个条件,调用Data_Send();函数,分别发送F,W,C,B 4个字符代号,用于发送给从机执行“关闭,涂色效果,戏剧追逐效果和彩虹效果”等命令。
②WiFi配置状态显示彩灯控制详细请参阅本文“1)WiFi配置用代码的修改”。
(4)从机代码
1)语音控制模块
模块是市售成品,没有开源资料,只有使用说明书,按照说明书提供的指令集就可以用代码控制了。
2)彩灯控制器
该代码充分利用当下流行的Adafruit_NeoPixel函数库,作为控制主线,读取主机串口的指令字符集,判断相关条件,添加相应代码,完成对WS2812B 16通道RGBLED彩灯模块的控制。详细代码:
①彩灯花样控制代码
花样五花百门,时间关系,我们只介绍“戏剧追逐效果”这部分的代码。
②彩灯花样函数
“theaterChase()”是一个不断循环的三色追逐效果函数,只要不断电,就一直循环下去,除非串口收到字符“F”,循环才会中断。
③花样函数的调用
字符:“C”是主机通过串口发过来的,在手机界面上的意思是启动“戏剧追逐效果”场景,从机收到这个字符后,会立刻调用“theaterChase();”函数,这样RGBLED彩灯就会发出绚丽夺目的光亮了。上面通过例,说明了该系统的部分代码,更详细和完整的内容,请参阅附件的“ardiuno完整代码”。为方便大家分享,附件还添加了电路图,代码,模块,固件烧写包等详细资料,请查阅为盼。鉴于篇幅所限,未能提供更多的说明,这方面的教程,请参阅Genius,admin以及bigfanofloT等老师的文章,里面都有非常详细,非常实用的内容。
感谢大家的关注,如有不妥之处,恳请批评指正。
(0 )
(0 )


-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖