“蓝牙彩灯”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
APP调试
 
(未显示3个用户的15个中间版本)
第8行: 第8行:
  
 
==原理==  
 
==原理==  
设备通过蓝牙与手机进行连接通讯,结合App来控制彩灯的颜色。
+
系统判断手机蓝牙和mCookie-BT是否建立了连接。当连接时,系统接收手机App传给mCookie-BT的数据,并解析出来,从而控制彩灯的颜色。当蓝牙断开连接时,系统则进入设定好的彩灯变幻模式,除非有蓝牙连接,否则循环在设定的模式中。
  
本套件使用了蓝牙无线通信模块Microduino-BT(4.0),关于蓝牙协议这里不再赘述,Microduino的蓝牙模块很好的屏蔽了底层的协议,使用它只需确认蓝牙串口的接法,默认是D4,D5。给出一张蓝牙通讯所使用的串口图,所有的串口连接方法都涵盖在该[图2 1]
+
 
 +
[[File:bluetooth-light-sch.jpg|center|600px]]
  
 
==设备==
 
==设备==
第17行: 第18行:
 
|模块||数量||功能
 
|模块||数量||功能
 
|-
 
|-
|[[Microduino-CoreUSB/zh]]||1||核心板
+
|[[mCookie-CoreUSB/zh]]||1||核心板
 
|-
 
|-
|[[Microduino-Sensorhub/zh]]||1||传感器转接板
+
|[[mCookie-Hub/zh]]||1||传感器转接板
 
|-
 
|-
|[[Microduino-BT/zh]]||1||蓝牙模块
+
|[[mCookie-BT/zh]]||1||蓝牙模块
 
|-
 
|-
| [[Microduino-Lantern/zh]]||1||彩灯
+
| [[Microduino-Color led/zh]]||1||彩灯
 
|-
 
|-
| [[Microduino-BM/zh]]||1||电池管理
+
| [[mCookie-BM/zh]]||1||电池管理
 
|}
 
|}
  [[File:ble_lamp.jpg|600px|center|thumb]]
+
  [[File:ble_lamp.jpg|center|600px]]
  
==文档==
+
==准备==
Android客户端:
+
*Setup 1:用USB线将CoreUSB模块与PC/Mac相连,并打开Arduino IDE。
注意:新版BT是蓝牙4.0,需要Android 4.3以上的系统才能支持。这里只提供Android的APP。
+
[[Image:CoreUSB_Ble_pc.jpg|600px|center]]
 +
*Setup 2:点击Files > Examples > mCookie > _103_BLE_Light, 加载程序。或者下载:
 +
[[File:_103_BLE_Light.jpg|600px|center]]
 +
* Setup 3:加载代码,选择好板卡和COM端口下载程序。
  
APP下载:'''[[File:Microduino-LAMP-APP.zip]]''
+
==程序说明==
 +
*蓝牙使用的是串口通讯,对于mCookie-CoreUSB来说,使用的是'''Serial1''',因此定义了串口服务。
 +
<source lang="cpp">
 +
#define my_Serial Serial1
 +
</source>
 +
*同时,蓝牙通讯的波特率(速度)为:9600,需要在'''setup()'''里面定义了串口通讯速率。
 +
<source lang="cpp">
 +
my_Serial.begin(9600);
 +
</source>
 +
*彩灯控制说明
 +
<source lang="cpp">
 +
#define PIXEL_PIN    A0    // Digital IO pin connected to the NeoPixels.
 +
#define PIXEL_COUNT  6
  
==搭建硬件==
+
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
*Setup 1:将CoreUSB、BT与Sensorhub叠堆。
+
</source>
[[File:CoreUSB_Ble_Sensorhub.jpg|600px|center|thumb]]
+
**'''PIXEL_PIN''':彩灯的控制引脚,用户可以自己更改控制引脚,同时也要更改硬件连接。
*Setup 2:将彩灯接到Sensorhub的A0引脚上。
+
**'''PIXEL_COUNT''':控制灯的个数,蓝牙控制最多可以控制6个,因为App蓝牙传输数据最多写了6个。
[[file:Microduino-sensorhub_rule.JPG|thumb|800px|center]]
+
*“#define xxx yy”函数:把“yy”的值赋予给“xxx”,上面函数也可以改成:
[[File:mic_colorled_ble.jpg|600px|center|thumb]]
+
<source lang="cpp">
 
+
Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, A0, NEO_GRB + NEO_KHZ800);
==软件调试==
+
</source>
*Setup 1:搭建开发环境,将CoreUSB接到电脑,下载程序代码。
+
*“ble()”函数是用来接收并解析手机发送的数据,解析数据函数:
[https://github.com/Microduino/Microduino_Tutorials/blob/master/MCookie_Tutorial/ble_color_led/ble_color_led.ino ble_color_led]
 
*Setup 2:下载Android客户端。解压安装并打开,如果没有打开蓝牙,会提示用户需要打开蓝牙设备。
 
[[File:Microduino_BT_Serial_1.png||300px|center|thumb]]
 
*Setup 3:点击右上角SCAN搜索设备,设备名为Microduino,点击进行连接。
 
[[File:Microduino_BT_Serial_2.png||300px|center|thumb]]
 
*Setup 4:初始情况在右上角出现Serial Present,等待变成Serial ready,此时就能正常通讯了。
 
[[File:Microduino_BT_Serial_3.png||300px|center|thumb]]
 
 
 
*APP说明:
 
**如果你有多个彩灯,可通过切换到Multi Color模式来调节,最多接6个。Single Color不管接多少个彩灯,所有灯的颜色都一致。
 
**可通过圆环来调节等的亮度。
 
**可通过底下的开关来切换开启或关闭灯光。
 
[[File:Microduino_BT_Serial_5.png||300px|center|thumb]]
 
 
 
*代码说明,一部分接收蓝牙信息,另一部分根据模拟值的大小控制灯的颜色组合。
 
**蓝牙信息读取
 
蓝牙模块串口使用,需要根据板子上的串口跳线确定,默认的通讯串口0:Serial
 
 
<source lang="cpp">
 
<source lang="cpp">
#define my_Serial Serial
+
sscanf((char *)strstr((char *)buffer, "C:"), "C:%d,%d,%d,%d", &sta[0], &sta[1], &sta[2], &sta[3]);
 
</source>
 
</source>
 
+
从代码中可分析传输的协议为:“C:%d,%d,%d,%d”,并且将解析到的4个数据“%d”分别赋值给:sta[0], sta[1], sta[2], sta[3]。前三个数据分别为R,G,B的颜色值,最后一个则为控制模式选择。
 +
*将解析到的数据来控制灯的颜色变化
 
<source lang="cpp">
 
<source lang="cpp">
void ble()
 
{
 
  while (my_Serial.available())
 
  {
 
    char c = my_Serial.read();
 
    delay(2);
 
 
    if (c == 'C')
 
      buffer_sta = true;
 
    if (c == '\n')
 
    {
 
      color_en = true;
 
      safe_ms = millis();
 
    }
 
    if (buffer_sta)
 
    {
 
      buffer[buffer_num] = c;
 
      buffer_num++;
 
    }
 
    //  Serial.println(c);
 
    //Serial.println(color_en);
 
  }
 
 
  if (buffer_sta)
 
  {
 
    buffer_sta = false;
 
 
    sscanf((char *)strstr((char *)buffer, "C:"), "C:%d,%d,%d,%d", &sta[0], &sta[1], &sta[2], &sta[3]);
 
 
    for (int a = 0; a < buffer_num; a++)
 
      buffer[a] = NULL;
 
    buffer_num = 0;
 
 
    for (int i = 0; i < 4; i++)
 
    {
 
      Serial.print(sta[i]);
 
      Serial.print(",");
 
    }
 
    Serial.println(" ");
 
 
 
     if (-1 == sta[3]) {
 
     if (-1 == sta[3]) {
 
       colorSet(strip.Color(sta[0], sta[1], sta[2]));
 
       colorSet(strip.Color(sta[0], sta[1], sta[2]));
第112行: 第72行:
 
       colorSet(strip.Color(sta[0], sta[1], sta[2]), sta[3]);
 
       colorSet(strip.Color(sta[0], sta[1], sta[2]), sta[3]);
 
     }
 
     }
  }
 
 
  if (millis() - safe_ms > 3000)
 
  {
 
    safe_ms = millis();
 
    color_en = false;
 
  }
 
}
 
 
</source>
 
</source>
**灯颜色变换
+
如果sta[3]的值为-1,所有连接的灯都是同一个颜色,为接收到的“sta[0], sta[1], sta[2]”组合而来的颜色,即手机上选的颜色。否则将可以单独控制6个灯的颜色。
当有蓝牙连接时,蓝牙控制灯的颜色
+
*当蓝牙连接时,会持续给BT发送“\n”的消息,只要有接收到则认为蓝牙一直在连接。并且给“color_en”赋值为真(true)。
 
<source lang="cpp">
 
<source lang="cpp">
    if (-1 == sta[3]) {
+
  if (c == '\n')
       colorSet(strip.Color(sta[0], sta[1], sta[2]));
+
    {
    }
+
       color_en = true;
    else if ((0 <= sta[3]) && (sta[3] < PIXEL_COUNT)) {
+
      safe_ms = millis();
      colorSet(strip.Color(sta[0], sta[1], sta[2]), sta[3]);
 
 
     }
 
     }
 
</source>
 
</source>
否则自动控制颜色
+
*蓝牙断开时,系统会在3S后让“color_en”的值为假(false)。开始执行自定义颜色变化,“!”表示非的意思。
 +
 
 
<source lang="cpp">
 
<source lang="cpp">
   if (!color_en)
+
   if (millis() - safe_ms > 3000)//用户可以改时间,3000单位是ms,即3S
 
   {
 
   {
     rainbowCycle(10, 255, 0, 0, 0);
+
     safe_ms = millis();
    rainbowCycle(10, 255, 0, 0, 1);
+
     color_en = false;
 
 
    rainbowCycle(10, 0, 255, 0, 0);
 
    rainbowCycle(10, 0, 255, 0, 1);
 
 
 
    rainbowCycle(10, 0, 0, 255, 0);
 
    rainbowCycle(10, 0, 0, 255, 1);
 
 
 
    rainbowCycle(10, 255, 0, 225, 0);
 
    rainbowCycle(10, 255, 0, 225, 1);
 
 
 
    rainbowCycle(10, 247, 139, 5, 0);
 
    rainbowCycle(10, 247, 139, 5, 1);
 
 
 
    rainbowCycle(10, 255, 255, 0, 0);
 
    rainbowCycle(10, 255, 255, 0, 1);
 
 
 
    rainbowCycle(10, 0, 255, 255, 0);
 
    rainbowCycle(10, 0, 255, 255, 1);
 
 
 
     for (int i = 0; i < 3; i++)
 
      rainbow(30);
 
 
   }
 
   }
 
</source>
 
</source>
 +
*“rainbowCycle(w, R, G, B, x);”函数使用说明,用户可以更改自己喜欢的颜色及方式。
 +
**w:颜色渐变延时时间;
 +
**R,G,B三基色;
 +
**x:“0”表示亮度从低到高渐变,“1”表示亮度从高到底渐变。
 +
 +
==硬件搭建==
 +
*Setup 1:程序代码控制用的是A0,所以将灯用连接线将LED灯安装到Hub模块的A0接口上。用户可以自己改。
 +
[[File:CoreUSB_Ble_steup1.jpg|600px|center]]
 +
LED灯的连接方法如图,请注意连接顺序,从LED的IN接口接入,从OUT接口接出本应用最多可控制6个LED灯。
 +
[[File:CoreUSB_Ble_steup11.jpg|600px|center]]
 +
*Setup 2:将激活后的电池盒与BM模块相连.
 +
[[File:CoreUSB_Ble_steup2.jpg|600px|center]]
 +
*Setup 3:将所有模块堆叠在一起,顺序随意,电路部分搭建完成。
 +
[[File:CoreUSB_Ble_steup3.jpg|600px|center]]
  
==结果==
+
==APP调试==
通过Microduino可以成功实现用手机控制彩灯,得到你想要的任意颜色。你也可以通过乐高搭建一个漂亮的外观。
+
*Setup 1:扫描左侧的二维码,下载Bluetooth Light APP。
 +
[[File:app_Ble_steup1.jpg|600px|center]]
 +
*IOS源代码下载:[https://github.com/zidong0822/MLight2 IOS_MLight]
 +
*Setup 2:载安装App后,打开应用,如果没有打开蓝牙,系统会提示,选择打开。
 +
[[File:app_Ble_steup2.jpg|600px|center]]
 +
*Setup 3:点击Scan,手机会开始搜索蓝牙设备,并显示在下方,选择名称为Microduino的设备.
 +
[[File:app_Ble_steup3.jpg|600px|center]]
 +
*Setup 4:连接成功后,你就可以用手机来控制灯光了
 +
[[File:app_Ble_steup4.jpg|600px|center]]
  
 
==视频==
 
==视频==
  
 
|}
 
|}

2016年1月11日 (一) 08:00的最新版本

Language English

概述

通过专用的Android App控制灯光的颜色和亮度。当手机不连接蓝牙能够自动变幻颜色,手机接入后,就可以通过手机控制灯的任意颜色了。

原理

系统判断手机蓝牙和mCookie-BT是否建立了连接。当连接时,系统接收手机App传给mCookie-BT的数据,并解析出来,从而控制彩灯的颜色。当蓝牙断开连接时,系统则进入设定好的彩灯变幻模式,除非有蓝牙连接,否则循环在设定的模式中。


设备

模块 数量 功能
mCookie-CoreUSB/zh 1 核心板
mCookie-Hub/zh 1 传感器转接板
mCookie-BT/zh 1 蓝牙模块
Microduino-Color led/zh 1 彩灯
mCookie-BM/zh 1 电池管理

准备

  • Setup 1:用USB线将CoreUSB模块与PC/Mac相连,并打开Arduino IDE。
  • Setup 2:点击Files > Examples > mCookie > _103_BLE_Light, 加载程序。或者下载:
  • Setup 3:加载代码,选择好板卡和COM端口下载程序。

程序说明

  • 蓝牙使用的是串口通讯,对于mCookie-CoreUSB来说,使用的是Serial1,因此定义了串口服务。
#define my_Serial Serial1
  • 同时,蓝牙通讯的波特率(速度)为:9600,需要在setup()里面定义了串口通讯速率。
my_Serial.begin(9600);
  • 彩灯控制说明
#define PIXEL_PIN    A0    // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT  6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
    • PIXEL_PIN:彩灯的控制引脚,用户可以自己更改控制引脚,同时也要更改硬件连接。
    • PIXEL_COUNT:控制灯的个数,蓝牙控制最多可以控制6个,因为App蓝牙传输数据最多写了6个。
  • “#define xxx yy”函数:把“yy”的值赋予给“xxx”,上面函数也可以改成:
Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, A0, NEO_GRB + NEO_KHZ800);
  • “ble()”函数是用来接收并解析手机发送的数据,解析数据函数:
sscanf((char *)strstr((char *)buffer, "C:"), "C:%d,%d,%d,%d", &sta[0], &sta[1], &sta[2], &sta[3]);

从代码中可分析传输的协议为:“C:%d,%d,%d,%d”,并且将解析到的4个数据“%d”分别赋值给:sta[0], sta[1], sta[2], sta[3]。前三个数据分别为R,G,B的颜色值,最后一个则为控制模式选择。

  • 将解析到的数据来控制灯的颜色变化
    if (-1 == sta[3]) {
      colorSet(strip.Color(sta[0], sta[1], sta[2]));
    }
    else if ((0 <= sta[3]) && (sta[3] < PIXEL_COUNT)) {
      colorSet(strip.Color(sta[0], sta[1], sta[2]), sta[3]);
    }

如果sta[3]的值为-1,所有连接的灯都是同一个颜色,为接收到的“sta[0], sta[1], sta[2]”组合而来的颜色,即手机上选的颜色。否则将可以单独控制6个灯的颜色。

  • 当蓝牙连接时,会持续给BT发送“\n”的消息,只要有接收到则认为蓝牙一直在连接。并且给“color_en”赋值为真(true)。
  if (c == '\n')
    {
      color_en = true;
      safe_ms = millis();
    }
  • 蓝牙断开时,系统会在3S后让“color_en”的值为假(false)。开始执行自定义颜色变化,“!”表示非的意思。
  if (millis() - safe_ms > 3000)//用户可以改时间,3000单位是ms,即3S
  {
    safe_ms = millis();
    color_en = false;
  }
  • “rainbowCycle(w, R, G, B, x);”函数使用说明,用户可以更改自己喜欢的颜色及方式。
    • w:颜色渐变延时时间;
    • R,G,B三基色;
    • x:“0”表示亮度从低到高渐变,“1”表示亮度从高到底渐变。

硬件搭建

  • Setup 1:程序代码控制用的是A0,所以将灯用连接线将LED灯安装到Hub模块的A0接口上。用户可以自己改。

LED灯的连接方法如图,请注意连接顺序,从LED的IN接口接入,从OUT接口接出本应用最多可控制6个LED灯。

CoreUSB Ble steup11.jpg
  • Setup 2:将激活后的电池盒与BM模块相连.
CoreUSB Ble steup2.jpg
  • Setup 3:将所有模块堆叠在一起,顺序随意,电路部分搭建完成。

APP调试

  • Setup 1:扫描左侧的二维码,下载Bluetooth Light APP。
App Ble steup1.jpg
  • IOS源代码下载:IOS_MLight
  • Setup 2:载安装App后,打开应用,如果没有打开蓝牙,系统会提示,选择打开。
  • Setup 3:点击Scan,手机会开始搜索蓝牙设备,并显示在下方,选择名称为Microduino的设备.
  • Setup 4:连接成功后,你就可以用手机来控制灯光了

视频