通过Arduino通信模块学习，了解Arduino通信模块原理和使用方法
产品外观 产品介绍 为了让你在自己的Arduino项目中运用这一火爆的无线通讯功能，我们特别开发了Arduino兼容的NFC近场通讯模块。 该产品100%兼容Arduino设备，运用UART串口进行通讯。你可以运用USB to UART转换器，轻松通过电脑对其进行测试。 用户也可根据自己需要，利用引出的管脚改变数据传输方式，如IIC，SPI等。 我们把内置的PCB天线做到了一张银行卡大小，为目前市场上最大，有效提高了NFC的通信距离。 读写器模式:支持ISO/IEC 14443A / MIFARE机制 读写器模式:支持 FeliCa机制 读写器模式:支持ISO/IEC 14443B机制 卡操作模式:支持ISO 14443A / MIFARE机制 卡操作模式:FeliCa机制 ISO/IEC18092，ECM340点对点 产品应用 非接触式支付系统 蓝牙和wi-fi设备的链接 分享联系人、照片和视屏等社交分享功能 智能手机的NFC应用 近场通讯简介 近场通信（Near Field Communication，NFC），又称近距离无线通信，是一种短距离的高频无线通信技术，允许电子设备之间进行非接触式点对点数据传输（在十厘米内）交换数据。 这个技术由免接触式射频识别（RFID）演变而来，并向下兼容RFID，最早由Sony和Philips各自开发成功，主要用于手机等手持设备中提供M2M(Machine to Machine)的通信。 由于近场通讯具有天然的安全性，因此，NFC技术被认为在手机支付等领域具有很大的应用前景。同时，NFC也因为其相比于其他无线通讯技术较好的安全性被中国物联网校企联盟比作机器之间的“安全对话”。 产品特性 工作电压：3.3v或5v 通信接口：UART 出厂通信波特率：115200 bps 高度集成的PN532 NFC芯片 支持ISO/IEC 14443A / MIFARE 只读写器模式中支持ISO/IEC 14443B NFC最大探测距离为20到50mm，视标签的天线大小而定 该NFC模块基于13.56MHz频段 连线图 主控板链接到电脑，下载好程序。 再按图接好NFC和控制板（这里用的是Leonardo主控板，UNO没有Serial1，因此注意修改程序，如有不明，请百度查阅相关资料。）， 当NFC卡靠近NFC模块时，即可通过Arduino串口窗读取NFC卡片信息。 NFC模块 Leonardo 3.3V 3.3V GND GND TXD Digital 0(RX1) RXD Digital 1(TX1) NFC模块 Mega 3.3V 3.3V GND GND TXD Digital 19(RX1) RXD Digital 18(TX1) 样例代码 /* # Editor : Adrian # Date : 2013.04.18 # Ver : 0.1 # Product: NFC Module for Arduino # SKU : DFR0231 # Description: # When the a card close to the device , the PC will receive the data # Connect the NFC Card's TXD, RXD, GND, +3.3V to leonardo's D0RX, D1TX, GND, +3.3V # Or connect the NFC Card's TXD, RXD, GND, +5V to leonardo's D0RX, D1TX, GND, +5V PN532 reads the tag by Arduino mega/Leonardo command list: #wake up reader send: 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 03 fd d4 14 01 17 00 return: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00 #get firmware send: 00 00 FF 02 FE D4 02 2A 00 return: 00 00 FF 00 FF 00 00 00 FF 06 FA D5 03 32 01 06 07 E8 00 #read the tag send: 00 00 FF 04 FC D4 4A 01 00 E1 00 return: 00 00 FF 00 FF 00 00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 XX XX XX XX 5A 00 XX is tag. */ //************* start ************** const unsigned char wake[24]={ 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xfd, 0xd4, 0x14, 0x01, 0x17, 0x00};//wake up NFC module const unsigned char firmware[9]={ 0x00, 0x00, 0xFF, 0x02, 0xFE, 0xD4, 0x02, 0x2A, 0x00};// const unsigned char tag[11]={ 0x00, 0x00, 0xFF, 0x04, 0xFC, 0xD4, 0x4A, 0x01, 0x00, 0xE1, 0x00};//detecting tag command const unsigned char std_ACK[25] = { 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0C, \ 0xF4, 0xD5, 0x4B, 0x01, 0x01, 0x00, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00}; unsigned char old_id[5]; unsigned char receive_ACK[25];//Command receiving buffer //int inByte = 0; //incoming serial byte buffer #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #define print1Byte(args) Serial1.write(args) #define print1lnByte(args) Serial1.write(args),Serial1.println() #else #include "WProgram.h" #define print1Byte(args) Serial1.print(args,BYTE) #define print1lnByte(args) Serial1.println(args,BYTE) #endif void setup() { Serial.begin(9600); // open serial with PC Serial1.begin(115200); //open serial1 with device //Serial2.begin(115200); wake_card(); delay(100); read_ACK(15); delay(100); display(15); } void loop() { send_tag(); read_ACK(25); delay(100); if (!cmp_id ()) { if (test_ACK ()) { display (25); delay (100); } } copy_id (); } void copy_id (void) {//save old id int ai, oi; for (oi=0, ai=19; oi<5; oi++,ai++) { old_id[oi] = receive_ACK[ai]; } } char cmp_id (void) {//return true if find id is old int ai, oi; for (oi=0,ai=19; oi<5; oi++,ai++) { if (old_id[oi] != receive_ACK[ai]) return 0; } return 1; } int test_ACK (void) {// return true if receive_ACK accord with std_ACK int i; for (i=0; i<19; i++) { if (receive_ACK[i] != std_ACK[i]) return 0; } return 1; } void send_id (void) {//send id to PC int i; Serial.print ("ID: "); for (i=19; i<= 23; i++) { Serial.print (receive_ACK[i], HEX); Serial.print (" "); } Serial.println (); } void UART1_Send_Byte(unsigned char command_data) {//send byte to device print1Byte(command_data); #if defined(ARDUINO) && ARDUINO >= 100 Serial1.flush();// complete the transmission of outgoing serial data #endif } void UART_Send_Byte(unsigned char command_data) {//send byte to PC Serial.print(command_data,HEX); Serial.print(" "); } void read_ACK(unsigned char temp) {//read ACK into reveive_ACK[] unsigned char i; for(i=0;i<temp;i++) { receive_ACK[i]= Serial1.read(); } } void wake_card(void) {//send wake[] to device unsigned char i; for(i=0;i<24;i++) //send command UART1_Send_Byte(wake[i]); } void firmware_version(void) {//send fireware[] to device unsigned char i; for(i=0;i<9;i++) //send command UART1_Send_Byte(firmware[i]); } void send_tag(void) {//send tag[] to device unsigned char i; for(i=0;i<11;i++) //send command UART1_Send_Byte(tag[i]); } void display(unsigned char tem) {//send receive_ACK[] to PC unsigned char i; for(i=0;i<tem;i++) //send command UART_Send_Byte(receive_ACK[i]); Serial.println(); } //*********** end ************* 应用实例 NFC基于Arduino UNO使用实例
外 观 概 述 这个模块是为了做ROBOT而选择的东东。当然，如果你有更好的想法，比如用于无线防盗报警器、远程遥控、数据交换、手持终端PDA、无线耳机、数字视频、无线鼠标、无线键盘以及其他短距离高速无线应用等，他也能够完全胜任。我们做ROBOT的想法是：把大部分功能集成化，从而解放主CPU。 APC220模块是高度集成半双工微功率无线数据传输模块，其嵌入高速单片机和高性能射频芯片。 创新的采用高效的循环交织纠检错编码，抗干扰和灵敏度都大大提高，最大可以纠24bits连续突发错误，达到业内的领先水平。 APC220模块提供了多个频道的选择，能够透明传输任何大小的数据，而用户无须编写复杂的设置与传输程序，并提供UART/TTL接口。 同时小体积，宽电压运行，较远传输距离，丰富便捷的软件编程设置功能，使APC220模块能够应用与非常广泛的领域。 性能描述 基本参数 电源 3.3 – 5.5V (±50mV 纹波) 发射电流 ≦35mA@10mW 接收电流 ≦30mA 休眠电流 ≦5uA 传输距离 1000米传输距离 (开阔地可视距离) 工作湿度 10%～90%（无冷凝） 工作温度 -20℃ - 70℃ 尺寸 37mm x 17mm x 6.5mm 性能参数 工作频率 420MHz to 450MHz (1KHz步进) 调制方式 GFSK 频率间隔 200KHz 发射功率 20mw (10级可调) 接收灵敏度 -117dBm@1200bps 空中传输速率 1200 - 19200bps 接口速率 1200 - 57600bps 接口效验方式 8E1/8N1/8O1 接口缓冲空间 512bytes 引脚定义 标号 定义 说明 1 GND GND 2 VCC 3.3V-5V 3 EN 电源使能端，≥1.6V或悬空使能，≤0.5V休眠 4 RXD URAT输入口，TTL电平 5 TXD URAT输出口，TTL电平 6 AUX URAT信号，接收为低，发送为高 7 SET 设置参数，低有效 设备互联方式 UART/TTL 电平 RS485/RS232 电平 USB/TTL 电平 USB/USB 教程 本教程将引导您学习 如何实现电脑和 Arduino 的无线通讯。在实验结束时，您可以在电脑上收到从 Arduino发送的“Hello！”。 硬件 APC220 模块 x2 USB 转串口 x1 Arduino 控制板 x1 USB 线A-B for Arduino x1 软件 RF-magic 点击下载 RF-Magic. Arduino IDE 1.0.6 点击下载 Arduino IDE 串口助手: 点击下载 Serial debugging assistant 注意： 本实验中我们的 Arduino 控制板用的是 Romeo（Leonardo）。在代码中它使用 Serial1 而不是 Serial。如果您使用其他类型的控制板，例如： Uno, Mega, Bluno 等等。请将 Serial1.println() 修改为 Serial.println()，否则您将无法下载代码。 Arduino IDE 1.6.* 由于软件问题，不能正常显示/收发数据。 模块配置 1 将天线旋紧在 APC220上，将其插在 USB转串口 上，最后再查到你的电脑上。 2 下载并安装 USB转串口 的驱动。前往 Silicon Labs 下载相应驱动 3 打开设备管理器，找到您的 USB转串口 的串口号，这里是 COM8。 4 用管理员身份双击打开应用 APC22X_V12A.exe （即：RF-magic ) Windows XP可以直接打开。 阅读：【英文】如何避免每次都需要管理员身份打开？ 注意：打开软件后，软件将自动打开串口，并有提示。如果提示打开串口失败，请用 管理员身份打开 或者 从设备管理器中将默认的串口号改为较小的串口号，如：“COM1”。 5 按照下图中红色标注里的参数配置（默认值），点击 写入 Write W。 Configuration Write and Read setting 设置 选项 默认参数 收发频率（RF frequency） 420MHz-450MHz（分辨率1KHz，精度±100Hz） 434MHz 空中速率（RF TRx Rate） 1200，2400，4800，9600，19200bps 9600bps 输出功率（RF Power） 0-9 9 串口速率（Series Rate） 1200，2400，4800，9600，19200，38400，57600bps 9600bps 网络地址码（NET ID） 0-65535（16位） 12345 节点地址码（NODE ID） 123456789012 串口效验（Series Patity） Disable，Odd Patity，Even Patity Disable 6 对另外一块 APC220进行相同的配置。 通信测试 6 对另外一块 APC220进行相同的配置。 通信测试 1 将一块插在电脑上，另一块插到 Arduino上（如果没有 相应的接口，可以单独按照管脚说明接线）。 One on computer to receive “Hello” Another on computer to send “Hello” 2 上传程序。 注意：请将 Serial1修改为 Serial如果您的 Arduino控制板是 Uno, Bluno, Mega 或其他使用串口0的设备。 //The sketch is tested on: Romeo v2 (Leonardo) void setup() { Serial1.begin(9600); //Set serial baud rate to 9600 } void loop() { Serial1.println("Hello!"); //print out hello string delay(1000); //1 second delay } 3 用串口助手或 Arduino串口监视窗打开COM8，您将看到“Hello！” 每隔一秒打印在电脑的窗口上。 （注意：Arduino IDE 1.6.5 不能正常显示） Arduino serial monitor on COM8( IDE 1.0.6) Serial Assistant on COM8 疑难解答 Q 1. 设备之间不能正常通讯，是什么原因？ A： 1．两端的通讯协议不一致，如：波特率，校验不一致。 2．两端的频点，空中波特率不一致。 3．不是同一系列产品。 4．电源连接不正常。 5、模块已损坏。 6．模块EN脚设置错误 7．通讯距离超过范围，或天线接触不良。 Q 2. 传输距离很近，根本没有所谓的1km？ A： 1．电压超过范围。 2．电源纹波过大。 3．天线接触不良或天线类型不对。 4．天线过与靠近金属表面或模块接地面积太小。 5．接收环境恶劣，如建筑物密集，有强干扰源。 6．有同频干扰。 Q 3. 使用注意事项： A： 考虑到空中传输的复杂性，无线数据传输方式固有的一些特点，应考虑以下几个问题。 1）无线通信中数据的延迟 由于无线通信发射端是从终端设备接收到一定数量的数据后，或等待一定的时间没有新的数据才开始发射，无线通信发射端到无线通信接收端存在着几十到几百毫秒延迟(具体延迟是由串口速率，空中速率以及数据包的大小决定)，另外从无线通信接收端到终端设备也需要一定的时间，但同样的条件下延迟时间是固定的。 2）数据流量的控制 APC220模块虽然有512bytes大容量缓冲区，但若串口速率大于等于空中速率，则存在数据流量的问题，可能会出现数据溢出而导致的数据丢失的现象。在这种情况下，终端设备要保证串口平均速率不大于60%空中速率，如串口速率为9600bps，空中速率为4800bps， 终端设备每次向串口发送100字节，那么终端设备每次向串口发送的时间约104ms，(104ms/0.6)*(9600/4800)=347ms，所以终端设备每次向串口发送100字节每次间隔不小于347ms，以上问题则不会出现。 3）差错控制 APC220模块具有较强的抗干扰能力，在编码已经包含了强大的纠检错能力。但在极端恶劣的条件下或接收地的场强已处于APC220模块接收的临界状态，难免出现接收不到或丢包的状况。此时客户可增加对系统的链路层协议的开发，如增加类似TCP/IP中滑动窗口及丢包重发等功能，可大大提高无线网络的使用可靠性和灵活性。 4）天线的选择 天线是通信系统的重要组成部分，其性能的好坏直接影响通信系统的指标，用户在选择天线时必须首先注重其性能。一般有两个方面，第一选择天线类型；第二选择天线的电气性能。选择天线类型的意义是：所选天线的方向图是否符合系统设计中电波覆盖的要求；选择天线电气性能的要求是：选择天线的频率带宽、增益、额定功率等电气指标是否符合系统设计要求。因此，用户在选择天线时最好向厂家联系咨询，APC220 要求的天线阻抗为50欧姆。 5）电源方面 此模块电源以外的其它管脚的工作电平应保证：同模块的电源电压一致，否则会损坏模块。
外 观 概 述 如今大多高端电子设备都配备蓝牙技术，如笔记本电脑、手机、PDA等等，蓝牙技术结束了“线缆噩梦”进入了全新的无线时代。 Bluetooth Bee V2蓝牙无线数传模块采用XBEE造型设计，体积尺寸紧凑，兼容XBEE的扩展底座，适用于各种3.3V的单片机系统，模块可以使用AT指令设置波特率和主从机模式。 板载LINK指示灯，可以了解模块的配对情况，配对成功后LINK灯常亮；自带高效板载天线，天线外露使信号质量更好发射距离更远，透明串口，可与各种蓝牙适配器、蓝牙手机配对使用。 人性化的设计为二次开发提供便利。 Bluetooth Bee V2蓝牙无线模块可以使用XBEE适配器修改波特率和主从机模式。 可以使用XBEE底座插接到Arduino控制器上，从而实现蓝牙无线控制。 性能描述 蓝牙芯片：CSR BC417143 蓝牙协议：Bluetooth Specification v2.0+EDR USB协议：USB v1.1/2.0 工作频率：2.4～2.48GHz unlicensed ISM band 调制方式：GFSK(Gaussian Frequency Shift Keying) 发射功率：≤4dBm, Class 2 传输距离：20～30m in free space 灵敏度：≤-84dBm at 0.1% BER 传输速率：Asynchronous: 2.1Mbps(Max) / 160 kbps；Synchronous: 1Mbps/1Mbps 安全特性：Authentication and encryption 支持profiles：Bluetooth serial port 串口默认设置：1200～115200/N/ 8/1，默认波特率：9600/N/ 8/1，从机模式 输入电压：+3.3V DC/50mA 工作温度：–20°C～+55°C 模块尺寸：32×24×9mm 模块引脚定义 应用实例 以下有两个应用，第一个是PC与蓝牙模块，第二个是两个蓝牙模块之间通信，以及第三个，大家期待的蓝牙和手机的通信也可以实现啦！在使用以下应用之前都需对蓝牙模块进行配置，比如主从设置、配对码、波特率等。 可以先选择一个你要实现的应用，按你应用的需求再来配置蓝牙模块，可能更加有效。 那就先选择一个应用，开始做吧！ 一、蓝牙模块设置 STEP 1：所需硬件 1x Bluetooh Bee V2蓝牙串口模块 1x XBee USB Adapter 适配器 1x Mini USB电缆 STEP 2: 切换到AT模式 如下图所示，模块有一个拨码开关是用来切换AT命令模式与运行模块的。我们这里是来配置模块，所以切换到AT mode那端。 STEP 3: 连接到XBee适配器 1、设置Bluetooth Bee V2蓝牙模块需要借助xbee适配器，如下图所示，将蓝牙模块插到xbee适配器上，再通过USB线连接到电脑上。 2、当然，XBee适配器需要安装驱动，才可以使用，安装成功后，在设备管理器中显示为一个串口，下图设备管理器中USB Serial Port(COM10)。这个COM口用来配置蓝牙模块的。 驱动下载点击 注意：STEP2、STEP3两步不能颠倒。 STEP4: 通过串口指令来配置蓝牙模块 1、在这个部分，我们需要用串口监视器来完成配置。有好多串口调试软件都可以完成，当然也可以用Arduino IDE的自带的串口监视器。在这里，我们就选用Arduino IDE自带的串口监视器来完成wifi配置。打开IDE,查看是否显示串口，我们这里选择COM10，打开串口监视器界面，设置波特率38400,选择“换行和回车模式”（Both NL&CR）。 注意：在AT模式中波特率默认为38400，和通讯时设置的波特率无关。 2、设置完成后，在串口中输入“at”（不区分大小写），测试蓝牙模块与USB串口是否建立连接，如果连接成功，会显示“[OK]”。按同样的方法在串口输入相关的AT指令就能就行配置了。当AT指令设置完毕后，将开关另一端退出AT命令模式，重新上电后设置才生效。 以下是AT指令集的说明： 1、测试指令： 指令 响应 参数 AT OK 无 2.模块重启指令： 指令 响应 参数 AT+RESET OK 无 3.设置和查询模块连接模式： 当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 指令 响应 参数 AT+CMODE=< Param > OK Param：参数取值如下： 0 —— 指定蓝牙地址连接模式 （指定蓝牙地址由绑定指令设置） 1 —— 任意蓝牙地址连接模式 (不受绑定指令设置地址的约束) 默认连接模式：0 AT+CMODE? +CMODE: < Param > OK 4.设置和查询模块角色： 模块角色说明： 1.从角色(Slave) ——被动连接，可以和任意蓝牙适配器配对使用； 2.主角色(Master)——查询周围从设备，并主动发起连接，从而建立主、从蓝牙设备间的透明数据传输通道。 3.回环角色(Slave-Loop)——被动连接，接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备； 注意：在后面会介绍到的如果是两块蓝牙模块进行配对的话，需要将其中一个设置为主，而另一个设置为从。 指令 响应 参数 AT+ROLE=< Param > OK Param：参数取值如下： 0 —— 从角色（Slave） 1 —— 主角色（Master） 2 —— 回环角色（Slave-Loop） 默认值：0 AT+ROLE? +ROLE: < Param > OK 5.设置和查询配对码： 指令 响应 参数 AT+PSWD=< Param > OK Param：配对码 默认值：1234 AT+PSWD? +PSWD: < Param > OK 6.设置和查询串口参数 指令 响应 参数（默认设置：9600,0,0） AT+UART=<Param1>,<Param2>,<Param3> OK Param1:波特率(bits/s): 取值如下： 4800 9600 19200 38400 57600 115200 230400 460800 921600 1382400 Param2:停止位： 0 —— 1位 1 —— 2位 Param3:校验位： 0 —— None 1 —— odd 2 —— Even AT+UART? +UART: <Param1>,<Param2>,<Param3> OK 更多指令可以查看数据手册 举例: 设置串口波特率:115200,1位停止位，无校验 串口输入 --> AT+UART=115200,0,0 串口返回 --> OK 波特率查询 串口输入 --> AT+UART? 串口返回 --> +UART:115200,0,0 OK STEP5: 切换到运行模式 当我们完成设置后，不要忘记切换到运行模式下噢，也就是没有标有字符的一端。 二、PC与蓝牙模块通信 STEP 1：所需硬件 1x 蓝牙适配器 1x DFRduino UNO R3 1x IO 传感器扩展板 V7 1x Bluetooh Bee V2蓝牙串口模块 1x USB电缆 1x XBee USB Adapter 适配器 1x Mini USB电缆 STEP2：按需求配置蓝牙模块 设置模块角色：在和PC连接时，最重要的一个配置就是将蓝牙模块设置为从角色。 设置串口参数：建议设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。 STEP3：硬件连接 把蓝牙模块插到I/O传感器扩展板上，再连接到UNO上。 UNO连接到电脑上。 将蓝牙适配器插到你的电脑USB口。 STEP4: 通过蓝牙软件建立连接 1、使用蓝牙适配器时，需要安装一个IVT BlueSolied，安装后，打开IVT BlueSoleil，插上蓝牙适配器，会看到下面这个界面，同时，设备管理器会显示2个COM口出来，但这不是我们需要的端口。 2、右击黄色的球体→搜索设备,黄色的球体就是蓝牙适配器，如果能成功搜索到的话， 会出现一个带问号的蓝色球体，这个就是我们的Bluetooth Bee V2蓝牙模块了。如下图所示。 3、右击蓝色问号球体→配对，输入配对码1234。 4、配对成功的话，蓝色问号球体上会出现一个绿色的连环扣锁图标。如下图所示。 5、右击蓝色问号球体→搜索服务,此时，再右击蓝色问号球体→连接蓝牙串口,这时，会出现下面这个对话框，然后自动完成连接。与此同时，会产生一个新的串口号,这个串口号正是我们需要的。也就是我们这里显示的串口14。 6、连接成功后，问号蓝色球体会变为绿色，蓝牙模块上的指示灯变为长亮，并有虚线箭头线表示正在传输数据。如下图所示。 恭喜你，你的蓝牙模块已经和PC建立连接了！ STEP5: 给UNO烧录一段测试代码，并查看收发数据 注意： 给UNO烧录程序时，选择的是UNO的串口号，而不是蓝牙的串口号。程序中的波特率设置与你蓝牙模块的波特率的设置保持一致。 我们这里使用的是新版的I/O扩展板，下载程序时，需将板子拨到Prog端，下载完后，再拨回Run端。 如果你使用的是旧版本的扩展板，记得下载程序时，请先拔下Bluetooth Bee V2蓝牙模块，下载完成后，再插回。 如果在下载程序的过程中，使连接断开了，记得重新建立连接，直接操作蓝牙建立连接第四步（右击蓝色问号球体→连接蓝牙串口）即可。 1、UNO-->发送端,PC-->接收端，烧录以下代码 void setup() { Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop() { Serial.print("Hello!"); //串口向外发送字符串 Serial.println(" DFRobot"); //串口向外发送字符串 ，并带回车 delay(1000); //延时 } 烧录完成后，从串口助手观察结果，如果你有串口助手最好，如果没有的话先下载一个CoolTerm，注意选择电脑系统相符的安装包。 下载完成后，打开CoolTerm，点击Options，选择蓝牙的的串口号14（Port）（就是前面说的，建立连接的串口号），及相应波特率115200（Baudrate）。 完成设置，点击OK,回到主界面点击Connect,就会看到下面接收到的结果。我们对照一下UNO的串口发出的数据一起看一下。 2、UNO-->接收端,PC-->发送端，烧录以下代码 void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } 烧录完成后，从串口助手观察结果，按上述方法打开串口助手，设置好串口号和波特率，回到主界面点击Connect。之后，在下拉菜单中选择Connection--Send String,会跳出下面这个对话框。 在该对话框输入你要发送的字符，我们就能从另一个串口，也就是UNO的串口中读出，下图所示。 三、两块蓝牙模块之间通信 STEP 1: 所需硬件 2x DFRduino UNO R3 2x IO 传感器扩展板 V7 2x Bluetooh Bee V2蓝牙串口模块 2x USB电缆 1x XBee USB Adapter 适配器 1x Mini USB电缆 STEP2：按需求配置蓝牙模块 设置模块角色：在两块蓝牙模块建立连接时，最重要的一个配置就是必须有蓝牙模块是主角色，另一个蓝牙模块设置为从角色。 设置串口参数：建议两块模块波特率统一设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。主从配对不需要驱动程序，两个模块上电就能传输。两块蓝牙模块上的指示灯长亮表示配对成功。此时串口功能已经启动。一主一从成对正常使用时灯不会灭。如主机和从机距离太远而断线，则主机和从机的灯一直闪，如果它们距离再靠近，则又会找在一起而自动连上。主机会记忆它配好的从机，一上电给主机就会找它记忆的从机地址。 STEP3: 硬件连接 将两块蓝牙模块分别插到I/O扩展板上，再接到UNO上。如下图所示。 两块UNO通过USB连接电脑。 STEP4: 给UNO烧录代码 烧录代码时，不要忘记拨到Prog一端，烧录完成后，再拨回Run。下载时，不需要按照上面配对时的主从顺序来下载程序，任何一个蓝牙模块都能作为发送端或者接受端。 发送端代码： void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ Serial.print("Hello!"); Serial.println("DFRobot"); delay(500); } 接收端代码： void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } STEP5: 从串口观察收发情况 同时打开两个串口，观察收发情况。如下图所示。 四、蓝牙模块与Android手机通信 STEP 1：所需硬件 1x DFRduino UNO R3 1x IO 传感器扩展板 V7 1x Bluetooh Bee V2蓝牙串口模块 1x XBee USB Adapter 适配器 1x USB电缆 1x Mini USB电缆 特定型号的Android 手机（下面会说明） STEP2：按需求配置蓝牙模块 设置模块角色：在和手机连接时，最重要的一个配置就是将蓝牙模块设置为从角色。 设置串口参数：建议设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。 STEP3：硬件连接 把蓝牙模块插到I/O传感器扩展板上，再连接到UNO上。 UNO通过USB连接到电脑上。 STEP4: 下载APP软件并安装 打开Bluetooth Terminal下载页面,点击Install。 如果无法安装，可以先点击列表查看是否含有你的手机型号。如果没有，很遗憾，那就无法使用该APP。如果有的话，请接着往下看。 建议可以在手机上，先搜索下载一个Google Play Store谷歌娱乐商店应用，之后在Google Play Syore中直接搜索Bluetooth Terminal,就能很方便的找到这个APP了。下载安装。安装完成后可以看到如下界面，说明成功安装了。 STEP5: 手机与蓝牙模块配对并建立连接 1、打开到手机蓝牙设置，先进行配对，密码为1234。每个手机的设置不同，你就自己捣鼓一下手机吧。这里就不便于截图。配对成功后，再回到软件界面，点击选择按钮，会出现如下的一个选择界面，这里也有可能由于手机类型不同，按键在不同地方。 2、选择Connect a device - Secure,会跳出下面这个对话框。点击Bluetooth_Bee_V2,开始建立连接。 3、连接成功后，蓝牙模块上的指示灯将会长亮。 STEP6: 给UNO烧录一段测试代码,并查看收发数据 注意： 给UNO烧录程序时，选择的是UNO的串口号，而不是蓝牙的串口号。程序中的波特率设置与你蓝牙模块的波特率的设置保持一致。 我们这里使用的是新版的I/O扩展板，下载程序时，需将板子拨到Prog端，下载完后，再拨回Run端。 如果你使用的是旧版本的扩展板，记得下载程序时，请先拔下Bluetooth Bee V2蓝牙模块，下载完成后，再插回。 如果在下载程序的过程中，使连接断开了，记得重新建立连接。 1、UNO-->发送端，手机-->接受端，烧录以下代码。 void setup() { Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop() { Serial.print("Hello!"); //串口向外发送字符串 Serial.println(" DFRobot"); //串口向外发送字符串 ，并带回车 delay(1000); //延时 } 烧录完成后，我们可以从手机的蓝牙终端看到UNO发送过来的数据。 2、UNO-->接收端，手机-->发送端，烧录以下代码。 void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } 烧录完成后，在手机终端输入一段字符，我们就可以从串口监视器看到UNO的接收情况。下图是我们的收发结果。
外 观 简 介 DF-BluetoothV3蓝牙模块采用独特双层板设计，即美观又防止静电损坏模块，设计2个电源输入口，宽电压供电（3.5V～8V）和3.3V供电，可适用于各种场合。 STATE和LINK指示灯清晰明亮，用于显示模块工作状态和连接状态（STATE状态：搜索状态(高104ms 周期342ms 2.9Hz闪烁)连接状态(高104ms 周期2s 0.5Hz闪烁)，LINK状态：配对后常亮）。 自带高效板载天线，信号质量好发射距离更远，透明串口，可与各种蓝牙适配器、蓝牙手机配对使用，人性化的设计为二次开发提供便利。 拨码开关可设置模块状态，LED Off可关闭LINK灯进入省电模式，AT Mode可使模块进入AT指令模式，通过AT指令可以修改波特率和主从机模式，将2个模块分别设置为主模块和从模块后，2个模块就可以自由配对进行数据传输，非常适用于2个单片机之间的数据通讯。 产品参数 蓝牙芯片：CSR BC417143 蓝牙协议：Bluetooth Specification v2.0+EDR USB协议：USB v1.1/2.0 工作频率：2.4～2.48GHz unlicensed ISM band 调制方式：GFSK(Gaussian Frequency Shift Keying) 发射功率：≤4dBm, Class 2 传输距离：20～30m in free space 灵敏度：≤-84dBm at 0.1% BER 传输速率：Asynchronous: 2.1Mbps(Max) / 160 kbps；Synchronous: 1Mbps/1Mbps 安全特性：Authentication and encryption 支持profiles：Bluetooth serial port 串口波特率：4800～1382400/N/ 8/1 默认为9600/N/ 8/1 输入电压：+3.5V～+8V DC或3.3V DC/50mA 工作温度：–20°C～+55°C 模块尺寸：40×20×13mm 引脚说明 引脚 说明 GND 地 0V VCC DC3.5V-8V输入，当有VCC输入时，3V3端口可当做3.3V电源输出 NC 空脚 RXD URAT输入口（TTL电平） 接单片机 TXD TXD URAT输出口（TTL电平） 接单片机 RXD GND 地 0V 3V3 DC3.3V，当有3.3V输入时，VCC端口不能接输入电源 资料说明 一、蓝牙模块设置 STEP 1：所需硬件 1x DF-BluetoothV3蓝牙串口模块 1x USB to Serial 转串口 STEP 2: 切换到AT模式 如下图所示，模块有一个2位拨码开关，1号开关LED Off是LINK灯的开关，可以关闭LINK省电，拨到ON为开，拨到1端为关；2号开关AT Mode是AT命令模式开关，拨到ON进入AT命令模式，拨到2端退出AT命令模式。 STEP 3: 连接到USB to Serial模块 1、设置DF-Bluetooth V3蓝牙模块需要借助USB to Serial模块，如下图所示，将蓝牙模块插到USB to Serial模块上，然后将2号开关AT Mode拨到ON端，再插到电脑USB接口上。 2、当然，USB to Serial模块需要安装驱动程序。安装成功后，在设备管理器中显示为一个串口，下图设备管理器中Silicon Labs CP210x USB to UART Bridge(COM15)。这个COM口用来配置蓝牙模块的。 驱动下载点击 注意：STEP2、STEP3两步不能颠倒。 STEP4: 通过串口指令来配置蓝牙模块 1、在这个部分，我们需要用串口监视器来完成配置。有好多串口调试软件都可以完成，当然也可以用Arduino IDE的自带的串口监视器。在这里，我们就选用Arduino IDE自带的串口监视器来完成wifi配置。首先，打开IDE,查看是否显示串口，我们这里选择COM15，打开串口监视器界面，设置波特率38400,选择“换行和回车模式”（Both NL&CR）。 注意：在AT模式中波特率默认为38400，和通讯时设置的波特率无关。 2、设置完成后，在串口中输入“at”（不区分大小写），测试蓝牙模块与USB串口是否建立连接，如果连接成功，会显示“[OK]”。按同样的方法在串口输入相关的AT指令就能就行配置了。当AT指令设置完毕后，将开关另一端退出AT命令模式，重新上电后设置才生效。 举例: 设置串口波特率:115200,1位停止位，无校验 串口输入 --> AT+UART=115200,0,0 串口返回 --> OK 波特率查询 串口输入 --> AT+UART? 串口返回 --> +UART:115200,0,0 OK STEP5: 切换到运行模式 当我们完成设置后，不要忘记切换到运行模式下噢,也就是标有字符2的一端。 命令解释 1、测试指令： 指令 响应 参数 AT OK 无 2.模块重启指令： 指令 响应 参数 AT+RESET OK 无 3.设置和查询模块连接模式： 当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 指令 响应 参数 AT+CMODE=< Param > OK Param：参数取值如下： 0 —— 指定蓝牙地址连接模式 （指定蓝牙地址由绑定指令设置） 1 —— 任意蓝牙地址连接模式 (不受绑定指令设置地址的约束) 默认连接模式：0 AT+CMODE? +CMODE: < Param > OK 4.设置和查询模块角色： 模块角色说明： 从角色(Slave) ——被动连接，可以和任意蓝牙适配器配对使用； 主角色(Master)——查询周围从设备，并主动发起连接，从而建立主、从蓝牙设备间的透明数据传输通道。 回环角色(Slave-Loop)——被动连接，接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备； 注意：在后面会介绍到的如果是两块蓝牙模块进行配对的话，需要将其中一个设置为主，而另一个设置为从。 指令 响应 参数 AT+ROLE=< Param > OK Param：参数取值如下： 0 —— 从角色（Slave） 1 —— 主角色（Master） 2 —— 回环角色（Slave-Loop） 默认值：0 AT+ROLE? +ROLE: < Param > OK 5.设置和查询配对码： 指令 响应 参数 AT+PSWD=< Param > OK Param：配对码 默认值：1234 AT+PSWD? +PSWD: < Param > OK 6.设置和查询串口参数 指令 响应 参数（默认设置：9600,0,0） AT+UART=<Param1>,<Param2>,<Param3> OK Param1:波特率(bits/s): 取值如下： 4800 9600 19200 38400 57600 115200 230400 460800 921600 1382400 Param2:停止位： 0 —— 1位 1 —— 2位 Param3:校验位： 0 —— None 1 —— odd 2 —— Even AT+UART? +UART: <Param1>,<Param2>,<Param3> OK 7.出厂设置： 指令 响应 参数 AT+ORGL OK 无 恢复默认设置： 设备类：0 查询密码：0x009e8b33 设备模式：从模式 结合模式：SPP 串口：38400比特/秒; 1位停止位，无奇偶校验 配对码“1234” 设备名称：“HHW-SPP-1800-2 更多指令可以查看数据手册 使用教程 PC与蓝牙模块通信 STEP 1：所需硬件 1x 蓝牙适配器 1x DFRduino UNO R3 1x IO 传感器扩展板 V7 1x DF-BluetoothV3蓝牙串口模块 1x USB电缆 1x USB to Serial 转串口 STEP2：按需求配置蓝牙模块 设置模块角色：在和PC连接时，最重要的一个配置就是将蓝牙模块设置为从角色。 设置串口参数：建议设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。 STEP3：硬件连接 把蓝牙模块插到I/O传感器扩展板上，再连接到UNO上。 UNO连接到电脑上。 将蓝牙适配器插到你的电脑USB口。 STEP4: 通过蓝牙软件建立连接 1、使用蓝牙适配器时，需要安装一个IVT BlueSolied，安装后，打开IVT BlueSoleil，插上蓝牙适配器，会看到下面这个界面，同时，设备管理器会显示2个COM口出来，但这不是我们需要的端口。 2、右击黄色的球体→搜索设备,黄色的球体就是蓝牙适配器，如果能成功搜索到的话， 会出现一个带问号的蓝色球体，这个就是我们的Bluetooth V3蓝牙模块了。如下图所示。 3、右击蓝色问号球体→配对，输入配对码1234。 4、配对成功的话，蓝色问号球体上会出现一个绿色的连环扣锁图标。如下图所示。 5、右击蓝色问号球体→搜索服务，，此时，再右击蓝色问号球体→连接蓝牙串口,这时，会出现下面这个对话框，然后自动完成连接。与此同时，会产生一个新的串口号,这个串口号正是我们需要的。也就是我们这里显示的串口14。 6、连接成功后，问号蓝色球体会变为绿色，蓝牙模块上的指示灯变为长亮，并有虚线箭头线表示正在传输数据。如下图所示。 恭喜你，你的蓝牙模块已经和PC建立连接了！ STEP5: UNO和PC之间收发数据，并查看收发数据 注意:#给UNO烧录程序时，选择的是UNO的串口号，而不是蓝牙的串口号。程序中的波特率设置与你蓝牙模块的波特率的设置保持一致。 1.我们这里使用的是新版的I/O扩展板，下载程序时，需将板子拨到Prog端，下载完后，再拨回Run端。 2.如果你使用的是旧版本的扩展板，记得下载程序时，请先拔下Bluetooth V3蓝牙模块，下载完成后，再插回。 3.如果在下载程序的过程中，使连接断开了，记得重新建立连接，直接操作蓝牙建立连接第四步（右击蓝色问号球体→连接蓝牙串口）即可。 1、UNO-->发送端,PC-->接收端，烧录以下代码 void setup() { Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop() { Serial.print("Hello!"); //串口向外发送字符串 Serial.println(" DFRobot"); //串口向外发送字符串 ，并带回车 delay(1000); //延时 } 烧录完成后，从串口助手观察结果，如果你有串口助手最好，如果没有的话先下载一个CoolTerm，注意选择电脑系统相符的安装包。 结果 下载完成后，打开CoolTerm，点击Options，选择蓝牙的的串口号14（Port）（就是前面说的，建立连接的串口号），及相应波特率115200（Baudrate）。 完成设置，点击OK,回到主界面点击Connect,就会看到下面接收到的结果。我们对照一下UNO的串口发出的数据一起看一下。 2、UNO-->接收端,PC-->发送端，烧录以下代码 void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } 烧录完成后，从串口助手观察结果，按上述方法打开串口助手，设置好串口号和波特率，回到主界面点击Connect。之后，在下拉菜单中选择Connection--Send String,会跳出下面这个对话框。 结果 在该对话框输入你要发送的字符，我们就能从另一个串口，也就是UNO的串口中读出，下图所示。 两块蓝牙模块之间通信 STEP 1: 所需硬件 2x DFRduino UNO R3 2x IO 传感器扩展板 V7 2x DF-BluetoothV3蓝牙串口模块 2x USB电缆 1x USB to Serial 转串口 STEP2：按需求配置蓝牙模块 设置模块角色：在两块蓝牙模块建立连接时，最重要的一个配置就是必须有蓝牙模块是主角色，另一个蓝牙模块设置为从角色。 设置串口参数：建议两块模块波特率统一设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。主从配对不需要驱动程序，两个模块上电就能传输。两块蓝牙模块上的指示灯LINK长亮表示配对成功。此时串口功能已经启动。一主一从成对正常使用时灯不会灭。如主机和从机距离太远而断线，则主机和从机的灯一直闪，如果它们距离再靠近，则又会找在一起而自动连上。主机会记忆它配好的从机，一上电给主机就会找它记忆的从机地址。 STEP3: 硬件连接 将两块蓝牙模块分别插到I/O扩展板上，再接到UNO上。如下图所示。 两块UNO通过USB连接电脑。 STEP4: 给UNO烧录代码 烧录代码时，不要忘记拨到Prog一端，烧录完成后，再拨回Run。下载时，不需要安装上面配对时的主从顺序来下载程序，任何一个蓝牙模块都能作为发送端或者接受端。 发送端代码： void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ Serial.print("Hello!"); Serial.println("DFRobot"); delay(500); } 接收端代码： void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } 结果 同时打开两个串口，并且将两个串口的波特率调到115200，再观察收发情况。如下图所示。 发送端 接收端 蓝牙模块与Android手机通信 STEP 1：所需硬件 1x DFRduino UNO R3 1x IO 传感器扩展板 V7 1x DF-BluetoothV3蓝牙串口模块 1x USB电缆 1x USB to Serial 转串口 特定型号的Android 手机（下面会说明） STEP2：按需求配置蓝牙模块 设置模块角色：在和手机连接时，最重要的一个配置就是将蓝牙模块设置为从角色。 设置串口参数：建议设置为115200,便于我们后面的调试。 设置模块连接模式：如果当模块无法被适配器、主机搜索到或无法连接时，需配置该参数，配置为AT+CMODE=1。 其他可以使用默认设置。具体如何设置，可以参看上面的蓝牙模块设置部分。 STEP3：硬件连接 把蓝牙模块插到I/O传感器扩展板上，再连接到UNO上。 UNO通过USB连接到电脑上。 STEP4: 下载APP软件并安装 打开Bluetooth Terminal下载页面,点击Install。 如果无法安装，可以先点击列表查看是否含有你的手机型号。如果没有，很遗憾，那就无法使用该APP。如果有的话，请接着往下看。 建议可以在手机上，先搜索下载一个Google Play Store谷歌娱乐商店应用，之后在Google Play Syore中直接搜索Bluetooth Terminal,就能很方便的找到这个APP了。下载安装。安装完成后可以看到如下界面，说明成功安装了。 STEP5: 手机与蓝牙模块配对并建立连接 1、打开到手机蓝牙设置，先进行配对，密码为1234。每个手机的设置不同，你就自己捣鼓一下手机吧。这里就不便于截图。配对成功后，再回到软件界面，点击选择按钮，会出现如下的一个选择界面，这里也有可能由于手机类型不同，按键在不同地方。 2、选择Connect a device - Secure,会跳出下面这个对话框。点击Bluetooth_V3,开始建立连接。 3、连接成功后，蓝牙模块上的指示灯LINK将会长亮。 STEP6: 给UNO烧录一段测试代码,并查看收发数据 注意:#给UNO烧录程序时，选择的是UNO的串口号，而不是蓝牙的串口号。程序中的波特率设置与你蓝牙模块的波特率的设置保持一致。 1.我们这里使用的是新版的I/O扩展板，下载程序时，需将板子拨到Prog端，下载完后，再拨回Run端。 2.如果你使用的是旧版本的扩展板，记得下载程序时，请先拔下Bluetooth V3蓝牙模块，下载完成后，再插回。 3.如果在下载程序的过程中，使连接断开了，记得重新建立连接。 1、UNO-->发送端，手机-->接受端，烧录以下代码。 void setup() { Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop() { Serial.print("Hello!"); //串口向外发送字符串 Serial.println(" DFRobot"); //串口向外发送字符串 ，并带回车 delay(1000); //延时 } 烧录完成后，我们可以从手机的蓝牙终端看到UNO发送过来的数据。 2、UNO-->接收端，手机-->发送端，烧录以下代码。 void setup(){ Serial.begin(115200); //初始化串口并设置波特率为115200 } void loop(){ char val; val = Serial.read(); //读串口 if(val!=-1){ Serial.print(val); //将收到是数据再通过串口发送出去 } } 结果 烧录完成后，在手机终端输入一段字符，我们就可以从串口监视器看到UNO的接收情况。下图是我们的收发结果。 手机端 串口监测端
外 观 概 述 传统的Arduino系列产品程序下载方式分为两种，一种是通用的ISP方式下载；另一种是通过USB数据线，利用单片机内部的bootloader引导程序进行串行编程。 但是随着产品应用范围的拓广，很多时候需要一种无线的编程方式，比如应用场合不便连接USB线缆或根本就无法连接（如机器鱼等机器人）。 Wireless Programming Module就可以在一定距离范围内实现对Arduino无线程序下载。 除支持Arduino无线下载程序之外，模块还可以用作通用的无线数传模块（UART接口）。 模块目前可以通过兼容XBee模块的扩展板来实现对Arduino全系列控制器，在一定距离范围内进行无线编程。 性能描述 工作电源：DC 2.7-3.6V，推荐值3.3V 工作电流：10mA（供电电压3.3V） 工作温度范围 ：-30～＋70℃ 无线频率：2.4-2.5GHz 接口类型：UART 支持波特率：1200/2400/4800/9600/14400/19200/28800/38400/57600/115200，默认：57600 传输距离：室外无遮挡20米 寄存器描述 模块的是通过写寄存器的方式进行配置的，接下来详细介绍每个寄存器的功能及注意事项。 1.端口波特率寄存器（Baud Rate） 模块支持的波特率为：1200/2400/4800/9600/14400/19200/28800/38400/57600/115200。 现以波特率设置方式来阐述所有寄存器和发送字符的关系，单片机实际工作时的波特率由三个寄存器来确定。 由于所有的指令操作为字符型，为了方便记忆和操作，将波特率拆成6个字符，如115200，拆成“11”“52”“00”（设置时写“0”亦可，以下类同）；1200（，拆成“00”“12”“00”，每两个字符代表对应寄存器中的实际数值，这样做的原因是用户可以不用去记忆实际波特率与参数的对应关系，记住自己常用的波特率，拆成6个字符发送即可。 2.器件地址寄存器（Module ID） 器件地址由5个字节的数据组成，可以通过地址的区分，来实现多模块间下载不受干扰（经过实际验证）。 如果在实际的环境中区分器件地址不是很可靠的话，可以再对不同的模块设置不同的载波频率。 3.载波频率寄存器（Frequency） 此无线模块载波频率可以在2.4-2.5GHz范围内调节，载波频率寄存器的最大值为125，单位调节频率为0.0008GHz。 一对模块载波频率相同才能通讯。 4.空中波特率寄存器（Air Rate） 空中波特率只能设置为3种模式，250K/1M/2M(bps) 5.时限设置寄存器（Timeout） 在Arduino系列产品无线程序下载应用中，时限设置非常讲究，目前：bootloader中波特率设置为19200的，时限设置设为10；波特率设置为57600和115200的，时限设置设置为20。 下面以Arduino客户端软件0021版本为例，列出不同控制板波特率和时限的设置： 控制板型号 波特率设置 时限设置 Arduino Uno 115200 20 Arduino Duemilanove or Nano w/ ATmeg328 57600 20 Arduino Diecimila,Duemilanove,or Nano w/ ATmega168 19200 10 Arduino Mega (ATmega1280) 57600 20 Arduino Mini 19200 10 Arduino Fio 57600 20 Arduino BT w/ ATmega328 19200 10 Arduino BT w/ ATmega168 19200 10 LilyPad Arduino w/ ATmega328 57600 20 LilyPad Arduino w/ ATmega168 19200 10 Arduino Pro or Pro Mini (5V,16MHz) w/ ATmega328 57600 20 Arduino Pro or Pro Mini (5V,16MHz) w/ ATmega168 19200 10 Arduino Pro or Pro Mini (3.3V,8MHz) w/ ATmega328 57600 20 Arduino Pro or Pro Mini (3.3V,8MHz) w/ ATmega168 19200 10 Arduino NG or older w/ ATmega168 19200 10 Arduino NG or older w/ ATmega8 19200 10 注意：本产品不支持mega2560！ 指令集描述 为方便操作，此模块仅有四条指令，寄存器需要一一配置，不能一次性配置所有寄存器。 在进行模块设置时，应将模块上的拨码开关1：MODE拨向左端（ON），此时红色LED亮，拨码开关2：PROG_EN拨向右端（此开关为厂家编程使用，用户禁止使用），模块参数配置结束后，MODE拨码开关1需要拨向右端，使能无线收发模式。 1.ATENTER\r\n ATENTER：查询指令，查看模块配置信息。 \r\n：回车换行符。 eg:如图所示 2.ATEXIT\r\n ATEXIT：复位指令，软件复位模块，使能之前所有设置。 \r\n：回车换行符。 eg:如图所示 3.ATEEPW[],[]\r\n ATEEPW：写寄存器指令，对指定寄存器进行写操作。 []：寄存器序号。 []：配置参数。 \r\n：回车换行符。 eg1:将模块的波特率设置为9600 ATEEPW1,0\r\n //对寄存器1写入00 ATEEPW2,96\r\n //对寄存器2写入96 ATEEPW3,0\r\n //对寄存器3写入00 Eg2:将模块的空中波特率改为1M ATEEPW10,1\r\n //对寄存器10写入1 4.ATEEPR[]\r\n ATEEPR：读寄存器指令，对指定寄存器进行读操作 。 []：寄存器序号。 \r\n：回车换行符。 eg:读取寄存器1的值 ATEEPW1\r\n //读寄存器1 设置软件的使用 使用模块配的设置软件进行系统参数配置。设置软件界面如下： 1.首先是选择COM端口，使用xbee适配器或其他USB-TTL模块连接模块，可以到设备管理器中查看到COM端口号. 2.然后Com Port选对应的端口号。 3.最后点Read（使用该软件时必须先读取一次模块），软件会自动扫描模块并读出模块的各个参数信息。 如果是用于Arduino程序下载，那么就可以选择下拉菜单中的Arduino硬件版本，然后点Write。写操作完成后，即可使用了。如下图所示： 如果只用于普通的无线数据传输，那么就单独设置波特率、频率等参数即可。如下图所示： 选择完毕后，点Write写入即可使用。 模块应用实例 应用领域 机器人等需要完全密封的装置，无线编程为调试带来方便。 多彩水晶吊灯的控制板，你完全可以把这个吊灯挂在天花板后通过无线下载的方式更改程序来改变灯光组合。你的杰作将不需要拆开就能编程，也不用漏出丑陋的下载接口。
外 观 概 述 来自DFRobot的这款GPS扩展板所使用u-blox公司的GPS模块，定位精度是2.5米，定位性能优异准确，整体参数真实可靠，绝对没有其余修饰水份，在防漫反射及抗干扰能力十分强劲，是工程人员得以信籁的高精度模块之一，在韩国及瑞士拥有95％以上的GPS模块市场。 u-blox公司最初于1997年生产的GPS采用美国SIRF公司的GPS芯片来生产模块，之后由于采用其它公司的芯片难以发挥自己掌握到的GPS绝技，于是在2000年后开始设计GPS芯片组并委托ATMEL公司代工生产，不仅降低成本发挥了显著作用，更重要的是u-blox对于GPS产品整体性能的发挥到了一种极致的地步，使得u-blox在连续几年的销售中蝉联GPS芯片／模块类全球销售顶尖之首。 LEA-5H是u-blox公司采用最新推出的第5代芯片组应用的高灵敏度版本的GPS芯片组做成的GPS模块，产品性能优异，可进行室内及桥梁底部定位，大大的增强了产品的可靠性，定位灵敏度令人叹为观止。 事实上，它可以做到毫不费力的在大部分室内进行良好的定位，当然，在中国，用得最多的地方还是将它放在汽车内部用于隐蔽安装GPS天线并做好伪装处理，这样做的好处是盗贼无法发现GPS系统从而增加车辆找回的机率。由于突出的高性能，LEA-5H是中国汽车界在2006年的主要发展方向。 LEA-5H是目前u-blox推出的小型化的第四代GPS模块定位产品本年度主力品种，模块体积竟然不到一元硬币大小，以突出的65mW的低功耗及竟达到-158dB的高感度信号追踪，更重要的是它可以支持无源／有源天线，采用陶瓷无源天线的优势是整个可以做到很小，甚至可以内置于手机当中，也可以外接有源天线来扩展更强的外围信号，各项性能指标在同类GPS模块轻松胜出。 新款的LEA-5H来代换原有的LEA-LA，主要表现在产品的灵敏度有很大的提升，可以达到-158dB的跟踪灵敏度了，产品的改进使得整个系统的性能进行提升，功耗也得以降低，电池使用时间更长更持久，更适合于移动产品设备应用。 技术规格 GPS模块工作电压：3.3v 50个通道的u-blox引擎，1百多万个有效相关器 热启动和辅助启动首次定位时间小于1秒 160dBm的SuperSense捕获和跟踪灵敏度 具备KickStart功能，型号微弱时可实现加速启动 支持AssistNow Online和AssistNow Offline等A-GPS服务 GPS、GALILEO、SBAS(WAAS、EGNOS、MSAS、GAGAN)混合引擎 4Hz定位更新速率 接收机类型 50通道u-blox 5引擎 GPS L1 C/A码 GALILEO L1公用服务SBAS:WAAS、EGNOS、MSAS、GAGAN 增益天线接口：SMA接头 接口类型： 1.支持USB v2.0直接驱动，全速12Mbit/s 2.支持与控制器的I2C(DDC)和UART(TTL)接口数据通讯 精度： 最大更新速率： 4Hz 精确度 定位 ：2.5Mcep SBAS ： 2.0mCEP 捕获 冷启动 ： 29s 温启动 ： 29s 辅助启动 ： <1s 热启动 ： <1s 电压 2.7~3.6V 功耗 ：120mW @ 3.0V 备用电源： 1.3~4.8V 天线类型： 有源与无源 灵敏度 捕获 ： -160dBm 跟踪 ： -160dBm 冷启动 ： -145dBm 天线供电方式 外部或内部VCC-RF 天线监测 集成短路检测和天线关断功能，开路检测由AADET-N输入和外部小电路提供 多径抑制 智能化多径检测与抑制 A-GPS 支持AssistNow Online及AssistNow Offline 运行温度 -40℃- +85℃ 存储温度： -40℃- +85℃ 运行限制 速度： 515m/s(1000节) 尺寸：72x55mm 示例代码 // # Editor : Lauren from DFRobot // # Date : 22.02.2012 // # Product name: DFRduino GPS Shield-LEA-5H // # Product SKU : TEL0044 // # Version : 1.0 // # Update the library and sketch to compatible with IDE V1.0 and earlier // # Description: // # The sketch for using the DFRduino GPS Shield-LEA-5H // # Connection: // # Directly connect the shield to the Arduino controller // # If you'd like to drive the shield via UART interface, you may need to connect the jumpers on the board. // # #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #define WireSend(args) Wire.write(args) #define WireRead(args) Wire.read(args) #define printByte(args) Serial.write(args) #define printlnByte(args) Serial.write(args),Serial.println() #else #include "WProgram.h" #define WireSend(args) Wire.send(args) #define WireRead(args) Wire.receive(args) #define printByte(args) Serial.print(args,BYTE) #define printlnByte(args) Serial.println(args,BYTE) #endif #include <Wire.h> #define BUFFER_LENGTH 10//Define the buffer length int GPSAddress = 0x42;//GPS I2C Address double Datatransfer(char *data_buf,char num)//Data type converter：convert char type to float { //*data_buf:char data array ;num:float length double temp=0.0; unsigned char i,j; if(data_buf[0]=='-')//负数的情况 { i=1; //数组中的字符型数据转换成整数并累加 while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); //将转换后的整数转换成浮点数 for(j=0;j<num;j++) temp=temp/10; //转换成负数 temp=0-temp; } else//正数情况 { i=0; while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); for(j=0;j<num;j++) temp=temp/10 ; } return temp; } void rec_init()//initial GPS { Wire.beginTransmission(GPSAddress); WireSend(0xff);//发送数据所在的地址 Wire.endTransmission(); Wire.beginTransmission(GPSAddress); Wire.requestFrom(GPSAddress,10);//要求从GPS器件读取10个字节 } char ID()//接收语句的ID { char i = 0; char value[7]={ '$','G','P','G','G','A',',' };//要接收的GPS语句的ID内容 char buff[7]={ '0','0','0','0','0','0','0' }; while(1) { rec_init();//接收数据初始化 while(Wire.available()) { buff[i] = WireRead();//接收串口的数据 if(buff[i]==value[i])//对比是否是正确的ID { i++; if(i==7) { Wire.endTransmission();//结束接收 return 1;//接收完毕返回1 } } else i=0; } Wire.endTransmission();//结束接收 } } void UTC()//获取时间信息 { char i = 0,flag=0; char value[7]={ '$','G','P','G','G','A',',' }; char buff[7]={ '0','0','0','0','0','0','0' }; char time[9]={ '0','0','0','0','0','0','0','0','0' };//存放时间数据 double t=0.0; while(1) { rec_init(); while(Wire.available()) { if(!flag) { buff[i] = WireRead(); if(buff[i]==value[i]) { i++; if(i==7) { i=0; flag=1; } } else i=0; } else { time[i] = WireRead(); i++; if(i==9) { t=Datatransfer(time,2);//转换成浮点型数据 t=t+80000.00;//将时间转换成北京时间 Serial.println(t);//输出时间数据 Wire.endTransmission(); return; } } } Wire.endTransmission(); } } void rec_data(char *buff,char num1,char num2)//接收数据子函数 { //*buff：存放接收数据的数组；num1：逗号数目；num2：数组长度。 char i=0,count=0; if(ID()) { while(1) { rec_init(); while(Wire.available()) { buff[i] = WireRead(); if(count!=num1) { if(buff[i]==',') count++; } else { i++; if(i==num2) { Wire.endTransmission(); return; } } } Wire.endTransmission(); } } } void latitude()//获取纬度信息 { char lat[10]={ '0','0','0','0','0','0','0','0','0','0' };//存放纬度数据 rec_data(lat,1 ,10);//接收纬度数据 Serial.println(Datatransfer(lat,5),5);//将纬度数据转换成浮点型数据并输出 } void lat_dir()//获取纬度方向信息 { char dir[1]={'0'};//存放纬度方向数据 rec_data(dir,2,1);//接收纬度方向数据 printlnByte(dir[0]);//将纬度方向信息输出 } void longitude()//获取经度信息 { char lon[11]={ '0','0','0','0','0','0','0','0','0','0','0' };//存放经度数据 rec_data(lon,3,11);//接收经度数据 Serial.println(Datatransfer(lon,5),5);//将经度数据转换成浮点型数据并输出 } void lon_dir()//获取经度方向信息 { char dir[1]={'0'}; rec_data(dir,4,1); printlnByte(dir[0]);//将纬度方向信息输出 } void altitude()//获取海拔信息 { char i=0,count=0; char alt[8]={ '0','0','0','0','0','0','0','0' }; if(ID()) { while(1) { rec_init(); while(Wire.available()) { alt[i] = WireRead(); if(count!=8) { if(alt[i]==',') count++; } else { if(alt[i]==',') { Serial.println(Datatransfer(alt,1),1); Wire.endTransmission(); return; } else i++; } } Wire.endTransmission(); } } } void setup() { Wire.begin();//IIC初始化 Serial.begin(9600);//设置波特率 Serial.println("DFRobot DFRduino GPS Shield v1.0"); Serial.println("$GPGGA statement information: "); } void loop() { while(1) { Serial.print("UTC:"); UTC(); Serial.print("Lat:"); latitude(); Serial.print("Dir:"); lat_dir(); Serial.print("Lon:"); longitude(); Serial.print("Dir:"); lon_dir(); Serial.print("Alt:"); altitude(); Serial.println(' '); Serial.println(' '); } } 相关资料 u-blox 5系列GPS数据资料 u-blox测试评估软件u-center u-blox测试评估软件u-center简介与使用介绍 u-center与单片机接口参数应用
Arduino通讯模块-wifi shield V2.2低功耗Wifi扩展板 支持b/g/n
外 观 概 述 这款扩展板采用Wizfi210模块，可以利用动态电源管理达至低功耗(待机：34.0μA； 接收：124mA； 输出：126mA)。如果使用WizFi210来设计产品，其功耗也相对较低，而且可以设置待机模式。 基于WizFi210的WIFI无线模块提供TTL电平串口到IEEE802.11b/g/n无线通信的桥接。 IEEE802.11n是IEEE最新批准的无线传输标准协议，具备更高传输速度，更广网络覆盖，更强兼容性，更加安全的特点。 目前许多无线电子设备厂商已经在大量产品中应用这一标准。如果你想兼容更多最新设备，Wizfi210是一极佳的方案。通过Wizfi210，任何具有TTL串口的设备都可以很容易地建立起无线网络，实现远程管理和控制。 wizfi210内部集成多种通信协议及其加密算法。只需要简单的设置即可实现多种场合的应用。兼容Arduino 接口规格，方便应用到Arduino项目中。 性能描述 标准Arduino叠层设计，可轻松插接到标准Arduino、MEGA、Romeo等控制器上 嵌入式IEEE802.11b/g/n无线网络 支持访问接入点(AP)、客户端、网关以及串口到WLAN等模式 支持协议：UDP, TCP/IP (IPv4), DHCP, ARP, DNS, HTTP/HTTPS Client and Server(*) 支持WEP, WPA/WPA2–PSK, Enterprise, EAP-FAST, EAP-TLS, EAP-TTLS, PEAP 加密 支持UART, SPI(), I2C()接口 支持TTL串口到无线的应用 数据流传输速率:11、5.5、2Mpbs (802.11b) 工作电压：5V，功耗<200Ma 无线标准:IEEE802.11b/g/n 频率范围: 2.4 - 2.497 GHz 输出功率:8dBm ± 1dBm 数据速率:54Mbps-1Mbps 调制类型:DSSS, CCK 尺寸：长54× 宽49 × 高11mm 重量：约40g 引脚分配图 Led指示灯说明 Power: 电源信号指示 STW: 串口到wifi网络通道状态指示 SDR: 闪烁（-1-）：串行数据收发（数据模式） 闪烁（-1-1-）：串行数据收发（命令模式） ASSOC: wifi Shield V2模块连接到AP的状态指示 应用实例 在这个部分我们做个简单的应用，用Wifi模块来创建一个网络服务器，跟着一步步做吧！ STEP 1: 所需硬件 1xDFRduino UNO R3 1xWiFi shield 1xUSB数据线 1x路由器 STEP 2: 硬件连接 首先，给UNO下载一个简单的Led闪烁的代码（Arduino IDE--File--Examples--Basics--Blink），避免wifi和USB之间串口通信出现冲突。 把wifi扩展板插到UNO上，连接好天线。 将“USB/Arduino”开关拨到“USB“，用来电脑串口直接发送AT指令给Wifi模块。 设置“Run/Prog”开关拨在“Run”。 插上USB数据线，“POWER”灯将同时亮起。 STEP 3: 通过串口指令来配置Wifi模块 在这个部分，我们需要用串口监视器来完成配置。有很多好用的串口调试软件，比如putty，CoolTerm，当然也可以用Arduino IDE的自带的串口监视器。在这里，我们就选用Arduino IDE自带的串口监视器来完成wifi配置。首先，打开IDE,查看是否显示串口，打开串口监视器界面，设置波特率115200，选择“换行和回车模式”（Both NL&CR）。 设置完成后，在串口中输入“at”，测试wifi模块与USB串口是否建立连接，如果连接成功，会显示“[OK]”。之后再输入“at+ws”指令，浏览wifi搜索到的周围所有路由器，查看是否有搜索到你的路由器。下图就是搜索到的结果。 开始配置你的wifi模块，根据你的路由器的设置，按以下指令顺序输入进行配对。 当得到来自wifi模块的反馈是，说明连接建立成功，我们已经完成wifi模块设置，并且在本地网络创建了一个TCP服务器。此时，指示灯“STW”和“ASSOC”会同时亮起，说明已和路由器建立连接。 注意: SSID,密码取决于你的路由器的设置。所以，先检查你的路由器。否则，如果设置不匹配，wifi模块与路由器无法建立连接。 “at+nset”是给wifi模块一个IP地址，IP地址由你给定，但必须确保这个IP地址不要和其他IP发生冲突。可以通过下面方法来查看你的IP地址。“运行”输入“cmd”，在跳出的窗口输入“ipconfig”，会显示“IPv4”、“子网掩码”、“默认网关”。 然后...我们就可以开始创建一个客户端，发送数据给我们wifi模块啦！ STEP 4: Wifi模块连接到TCP服务器 在这个部分，我选择putty作为一个TCP客户端，发送指令给WIFI模块。 在Host Name中输入，你前面给wifi配置的IP地址。在Port输入，在“at+nauto=1,1,.4000”设置地址4000。（可查询Wizi210/220用户手册，wifi模块做为服务端和客户端的配置有所不同，这里是做为服务器）。Connection type选择Raw。点击Open。 点击Open，会弹出一个黑色的对话框，你就可以通过putty模拟的TCP服务器给wifi模块发送指令了。同样putty也能接收到来自串口的字符串。 //以下翻译自WizFi210 User manual，原文可参考相关链接// 应用指导及使用指令说明 AP 搜寻 串口转WIFI的接口通过指定的SSID，BSSID或通道在指定的时间内命令无线通道搜寻WIFI无线AP和 ad hoc网络。 搜寻可以查找指定SSID、BSSID的网络，指定的无线通道的网络或是这些条件的组合网络。 网络连接管理 网络连接管理单元处理相关连接的事件，提供UDP、TCP连接端口（与我们熟知的BSD端口类似）。 每个端口既可以和服务器也可以和客户端的连接。每一个连接有一个唯一的、单一16进制值（0~15）作为CID。 可以在编译的时候允许有最大的连接数（达到16）。 注意:这个单一的十六进制数字的CID用于TCP、UDP、服务器和客户端的连接。 自动连接操作 自动连接成功可以在有效的通信范围内充当一个串口通信接口，在不需要命令或用户干涉的情况下进行连接管理，这相当于替换了电缆通信。 这种模式下，根据当前有效的参数值，基站自动建立无线网络连接，然后在主机和目标WizFi210之间透明地传输数据（数据模式）。没有状态信息发送到主机。 WizFi210的操作模式如下： 命令模式：在这种模式下，数据解析为WizFi210的控制命令。 数据模式：在这样模式下，串行数据传送到WiFi接口。 在数据模式，WizFi210的功能： 从串口接收字符并通过连接的端口发送数据。 从连接的端口接收数据然后通过串口发送数据。 1.串口主机可以发送退出命令来获得接口控制权，退出命令是“+++”序列，后面有一秒钟的间歇，在这一秒钟期间，串口不能收到其它字符。当WizFi210 收到这样的字符，WizFi210 将退出数据模式而进入到命令模式。 2.在需要时，主求机可以通过串口修改网络配置或其它参数。然而，WizFi210 不接收任何新的TCP/UDP、客户端/服务器或者数据请连接。 3.ATO命令（ASCII 字符‘O’，不是数字‘0’）用于从命令模式返回到数据模式。应用“AT+XETH=1”命令（允许硬件触发），通过GPIO29(GPIO10)端口，你可以在数据模式和命令模式之间切换，而不需要使用退出序列命令(“+++”)。但是要注意的是不同的固件版本GPIO端口也是不同的。但是当你使用 GPIO29(GPIO10) 来转换数据/命令模式时, 应该保证该转换以及缓冲处理过程前后300ms内无UART输入。 4.使用WizFi210 的D2（GPIO31）、D4（GPIO28），你可以查看WizFi210 是否跟AP 关联，以及串口转WIFI 网络通道是否正常。运行“AT+XDUM=1”命令（关闭UART消息），在数据模式下，所有UART 的信息将会被阻止。在这种情况下，你必须检查GPIO28 和GPIO31 确定关联断开还是网络连接关闭。 5.在数据模式，为了避免发送大量的数据包和小负载到网络，Nagle算法的等待时间可用于缓存将要发送的任何字符。等待时间是以10ms为单位进行设定的，该功能适合于UDP和TCP连接。 应答代码 WizFi210通过串口可能返回给主机的代码，具体描述如下: 返回代码可以了解WizFi210是否执行了AT命令。在ASCII字符串的前面和后面都有回车字符(Carriage Return)(\r, 0x0d) 和上面是换行字符(Line Feed) (\n, 0x0a) 下面是ASCII字符。 如果用戶向WizFi210输入了“at”字符和换行字符(Line Feed )： at +换行字符(Line Feed)(0x61 0x74 0x0d) 你能看到下面的数据： at + 回车字符(Carriage Return)(0x61 0x74 0x0d) + \r\n[OK]\r\n (0x0d 0x0a 0x5b 0x4f 0x4b 0x5d 0x0d 0x0a) AT命令举例 下面描述了AT命令。在应用例子中，WizFi210建立了与AP的连接，重启后自动打开了串口转无线网的通道。 AT命令 这一部分提供了串口转无线网的命令列表和它们的作用。 参数都是ASCII码，比如：ATEn（n=1的时候）表示的是ASCII中的“A”、“T”、“E”、“1”。 如果哪些参数是可供选择的，必选参数需加<>，可选参数需加[ ]. 如果一个参数是必选的，任何与之相关的子参数也是必选的；一个可选参数的子参数也是可选的。 参数需按照命令描述中的顺序给出。当一个可选参数没有被提供时，逗号也应该保留在命令中。每个命令需以“AT”开头；任何其他其实字符可能会导致返回一个错误。 命令应答：在大多数情况下，有效命令返回OK。无效的输入返回ERROR：INVALID INPUT. 一些命令或许在此版本不被支持。 命令接口 UART/WizFi210接口配置 文件管理 Wi-Fi 接口 Wi-Fi安全 无线配置 网络接口 连接管理 电池（电量）检查 功率状态管理 自动连接 设置准备 其它 相关链接 WizFi210 User manual WizFi210 Quick Start Guide WiFi Shield原理图
外观 简介 这是DFRobot研发的一款GPS/GPRS/GSM Arduino扩展板。 这是一款四频GSM/GPRS驱动器，工作频率为EGSM 900MHz/DCS 1800MHz和GSM850 MHz/PCS 1900MHz。 它也支持GPS卫星导航技术，能让你的机器人和控制系统来发送信息并使用GSM网络。 它是通过AT指令（GSM07.07 ,07.05 和 SIMCom加强型AT指令）来控制的，您能直接通过电脑和Arduino板来启动它的GSM&GPS功能，其中安装有GPS&GSM高增益SMD天线。 这款GPS/GPRS/GSM板内嵌有SIMCom公司的SIM908芯片，具有GPS定位功能和一个行业标准界面。这两项技术的完美结合，能让您在任意时间追踪任何地区内的货物，交通工具和人，只要这些地区有信号覆盖。 V3.0与V3.1的差别仅在于复位键旁边的GSM/GPS转换开关。V3.0采用了跳帽的形式，而V3.1采用了3档开关的形式。其他部分完全相同，产品信息和资料都可以共用。 V3.0相比V2.0版本，升级到SIM908芯片，GPS定位精确到2.5m，冷启动时间缩短到30s。接收器的频道由原来的20个升级到42个。新的芯片使得功耗更低，敏感度更高。另外，在扩展板布局方面。V3.0版本移除了SIM908旁边的排针，用户可以自己焊接。Sim卡槽从芯片顶部移到了左上角，为新的芯片方案提供空间。新版本还移除了右边的扬声器。更多的功能升级，请参考SIM908芯片的说明。同时还可以参考我们产品资料库，获得更多的端口示意图和示例代码。 技术规格 供电电源：6-12V 低电量消耗（100mA@7V-GSM模式） 四频 850/900/18001900MHz GPRS multi-slot class 10 GPRS mobile station class B 采用GSM phase 2/2+标准 CLass4(2 W @ 850/900 MHz) Class 1 (1 W @ 1800/1900MHz) 通过AT指令控制(GSM07.07 ,07.05 和SIMCom加强型AT指令) 支持GPS卫星导航技术 内嵌有GPS&GSM高增益SMD天线 支持4*4按钮垫 USB/Arduino控制开关 Arduino可编程交换机 LED指示灯能显示电源供应状态，网络状态和工作模式 大小：81*70mm 扩展板接口功能 S1、S2开关： S1：编程/通信模式切换，prog：编程模式，comm：通信模式。 S2：USB/arduino通信模式切换，USB：扩展板通信通过USB口，arduino：扩展板与arduino通信。 状态指示灯： PWR:电源指示灯； STAT：模块启动状态指示灯； NET:网络状态指示灯； 1. 熄灭——模块没有工作， 2. 64ms亮/800ms熄灭——模块没有找到网络， 3. 64ms亮/3000ms灭——模块注册到网络， 4. 64ms亮/300ms熄灭——GPRS通讯。 J10/J11/J12： J10：将D3引脚作为GSM部分串口控制引脚，LOW低电平使能GSM串口，HIGH高电平关闭GSM串口； J11：将D4引脚作为GPS部分串口控制引脚，LOW低电平使能GPS串口，HIGH高电平关闭GPS串口； J12：将D5引脚作为GSM开机引脚，控制模块GSM部分开机。 注意：默认短路帽接上即可，如果D3、D4、D5引脚您已经作为其它功能控制引脚，可以将J10/J11/J12相应引脚的短路帽拔掉，与其它空闲引脚相连接。 串口选择 扩展板有两种串口：GSM串口，GPS串口。主控板UNO只有一组串口，同一时间只能与一种串口通信，所以需要两种串口切换使用。 扩展板有两种串口切换选择方式:1、程序控制串口选择，同上面所述，控制D3、D4引脚可以切换两种串口。2、硬件串口选择，在Uart Select处通过切换开关切换串口。 GPS功能使用介绍 GPS通信通过USB口 注意：GPS天线必须置于室外，才可以获得GPS定位数据输出。 1、硬件连接 扩展板接到主控板UNO，USB线连接好。 2、下载程序 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { //关闭引脚使能切换串口功能，启用硬件短路跳接切换串口功能 digitalWrite(3,HIGH);//关闭GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX } 3、打开串口助手软件 S1按键拨到Comm端，S2按键拨到USB端。 Uart Select串口选择开关拨到GSM端 打开串口助手软件，默认波特率为9600bps，勾选发送新行（在Arduino串口中是回车）。此时STAT灯亮，模块启动，如果没有启动可以按下RST复位键，重新开启。 4、发送AT命令控制GPS通信 发送AT命令（进行同步） 发送AT+CGPSIPR=9600 命令（设置GPS通信波特率为9600bps） 发送AT+CGPSPWR=1命令（turn on GPS power supply） 发送AT+CGPSRST=1命令 （reset GPS in autonomy mode） 5、将Uart Select处开关拨到GPS端 如果GPS天线已经放置露天位置，等待几分钟后，会有正确的GPS定位信息数据输出。 当想停止GPS信息输出，需将串口短路帽跳接到GSM（使能GSM串口通信，关闭GPS串口通信）, 发送AT+CGPSPWR=0命令（turn off GPS power supply） 发送AT+CPOWD=1，将模块关机。 想重新开机再次按下RST按键。 GPS与Arduino通信 1、硬件连接 将扩展板接到主控板UNO上，插好USB线，Uart Select串口选择开关拨到中间。 2、下载程序 扩展板S1开关拨到Prog端，下载下面程序。 double Datatransfer(char *data_buf,char num)//数据转换：将字符型数据转换为浮点型数据 { //*data_buf：要转换的数组；num：小数点的个数 double temp=0.0; unsigned char i,j; if(data_buf[0]=='-')//负数的情况 { i=1; //数组中的字符型数据转换成整数并累加 while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); //将转换后的整数转换成浮点数 for(j=0;j<num;j++) temp=temp/10; //转换成负数 temp=0-temp; } else//正数情况 { i=0; while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); for(j=0;j<num;j++) temp=temp/10 ; } return temp; } char ID()//接收语句的ID { char i=0; char value[6]={ '$','G','P','G','G','A' };//要接收的GPS语句的ID内容 char val[6]={ '0','0','0','0','0','0' }; while(1) { if(Serial.available()) { val[i] = Serial.read();//接收串口的数据 if(val[i]==value[i])//对比是否是正确的ID { i++; if(i==6) { i=0; return 1;//接收完毕返回1 } } else i=0; } } } void comma(char num)//接收逗号字符 { char val; char count=0;//对接收到的逗号计数 while(1) { if(Serial.available()) { val = Serial.read(); if(val==',') count++; } if(count==num)//数目正确结束接收 return; } } void UTC()//获取时间信息 { char i; char time[9]={ '0','0','0','0','0','0','0','0','0' }; double t=0.0; if( ID())//语句正确 { comma(1);//接收1个逗号 //读取语句第一个逗号后的数据 while(1) { if(Serial.available()) { time[i] = Serial.read(); i++; } if(i==9) { i=0; t=Datatransfer(time,2);//转换成浮点型数据 t=t+80000.00;//将时间转换成北京时间 Serial.println(t);//输出时间数据 return; } } } } void latitude()//获取纬度信息 { char i; char lat[10]={ '0','0','0','0','0','0','0','0','0','0' }; if( ID()) { comma(2); //读取语句第二个逗号后的数据 while(1) { if(Serial.available()) { lat[i] = Serial.read(); i++; } if(i==10) { i=0; Serial.println(Datatransfer(lat,5),5);//输出纬度数据 return; } } } } void lat_dir()//获取纬度方向信息 { char i=0,val; if( ID()) { comma(3); //读取语句第三个逗号后的数据 while(1) { if(Serial.available()) { val = Serial.read(); Serial.write(val);//输出方向信息 Serial.println(); i++; } if(i==1) { i=0; return; } } } } void longitude()//获取经度信息 { char i; char lon[11]={ '0','0','0','0','0','0','0','0','0','0','0' }; if( ID()) { comma(4); //读取语句第四个逗号后的数据 while(1) { if(Serial.available()) { lon[i] = Serial.read(); i++; } if(i==11) { i=0; Serial.println(Datatransfer(lon,5),5);//输出经度数据 return; } } } } void lon_dir()//获取经度方向信息 { char i=0,val; if( ID()) { comma(5); //读取语句第五个逗号后的数据 while(1) { if(Serial.available()) { val = Serial.read(); Serial.write(val);//输出经度方向 Serial.println(); i++; } if(i==1) { i=0; return; } } } } void altitude()//获取海拔信息 { char i,flag=0; char alt[8]={ '0','0','0','0','0','0','0','0' }; if( ID()) { comma(9); //读取语句第九个逗号后的数据 while(1) { if(Serial.available()) { alt[i] = Serial.read(); if(alt[i]==',') flag=1; else i++; } if(flag) { i=0; Serial.println(Datatransfer(alt,1),1);//输出海拔数据 return; } } } } void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); //使能GSM串口 digitalWrite(3,LOW); digitalWrite(4,HIGH); delay(2000); //设置波特率 Serial.begin(9600); //等待GPS ready delay(5000); //发送AT命令同步 Serial.println("AT"); delay(2000); //turn on GPS power supply Serial.println("AT+CGPSPWR=1"); delay(1000); //reset GPS in autonomy mode Serial.println("AT+CGPSRST=1"); delay(1000); //使能GPS串口 digitalWrite(4,LOW); digitalWrite(3,HIGH); delay(2000); Serial.println("$GPGGA statement information: "); } void loop() { while(1) { Serial.print("UTC:"); UTC(); Serial.print("Lat:"); latitude(); Serial.print("Dir:"); lat_dir(); Serial.print("Lon:"); longitude(); Serial.print("Dir:"); lon_dir(); Serial.print("Alt:"); altitude(); Serial.println(' '); Serial.println(' '); } } 3、设置扩展板与Arduino通信 S1按键拨到Comm端，S2按键拨到Arduino端。 GSM功能使用介绍 注意：在使用扩展板GSM功能时，需要接外接电源6-12V，因为GSM模式下电流需要在200mA左右。 GSM通信通过USB口 1、硬件连接 扩展板接到主控板UNO，SIM卡、麦克、耳机插好。 USB线、外接电源接好。 2、下载程序 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX } 3、打开串口助手软件 S1按键拨到Comm端，S2按键拨到USB端，S3按键拨到中间。 打开串口助手软件，默认波特率为9600bps，勾选发送新行。此时STAT灯亮，模块启动，如果没有启动可以按下RST复位键，重新开启。 打电话 步骤： AT 同步 -ATDXXXXXXX； 拨号 相关指令： ATH 挂机命令 ATA 接电话 其它指令可参见扩展板销售网页所附链接：AT指令文档。 发短信 步骤： AT 同步 AT+CMGF=1 （设置短消息的格式为文本格式） AT+CMGS="XXXXX" （xxxx为目的地的电话号码） 出现“>” 在后面输入短信内容，输入完后 点击发送； 然后再勾选“HEX发送” 发送“1A”。（不区分大小写） GSM通信与Arduino 硬件连接： 扩展板接到主控板UNO，SIM卡、麦克、耳机插好。 USB线、外接电源接好。 打电话 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //端口模式设置 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); //使能GSM串口 digitalWrite(3,LOW); digitalWrite(4,HIGH); delay(2000); //设置波特率 Serial.begin(9600); //等待call ready delay(5000);delay(5000);delay(5000); } void loop() { //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(2000); //打电话 Serial.println("ATDXXXXXXXXXXX;");//对方电话号码 while(1); } 将S1开关拨到Comm，S2开关拨到Arduino，Uart Select串口选择开关拨到中间。 发短信 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //端口模式设置 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); //使能GSM串口 digitalWrite(3,LOW); digitalWrite(4,HIGH); delay(2000); //设置波特率 Serial.begin(9600); //等待call ready delay(5000); delay(5000); delay(5000); } void loop() { //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(2000); //发送短信 Serial.println("AT+CMGF=1"); delay(1000); Serial.println("AT+CMGS=\"xxxxxxxxxxx\"");//xxx为电话号码 delay(1000); Serial.print("TEST"); delay(1000); Serial.write(26); while(1); } 将S1开关拨到Comm，S2开关拨到Arduino，Uart Select串口选择开关拨到中间。 GPRS功能使用介绍 这里做了个简单的例子，模块建立TCP连接，传输数据到乐联网平台。首先需要在乐联网平台免费注册账号，添加自己的网关和设备，具体步骤参考乐联网使用详细手册。 传输数据时会产生流量，所以最好保证你的SIM卡有GPRS流量套餐。 例子看懂之后大家就可以根据自己的需要，将自己的数据传到相应的平台。 相关AT指令介绍 选择三个步骤完成初始化过程，在初始化失败的情况可以知道失败在哪一步骤。AT+CIPSTART一步骤完成就是方便快捷。 乐联网TCP服务器通讯协议 服务器信息 1、服务器域名tcp.lewei50.com 2、服务器IP：42.121.128.216 3、服务器端口号：9960 服务器后台设置准备工作： 参考文档 http://www.lewei50.com/dev/doc/126 1、注册并登录乐联网后台，记住你的userkey用户编号，图片黑体字部分。 userkey：5d3eeec03bc747d7a23ab7d99c9340ea 2、添加网关设备名称，记住网关标识编号，比如02。 如果你LED、继电器之类的需要服务器来控制的设备，可勾选“是否可控”。否则可不选。 API地址：http://tcp.lewei50.com:9965/?method=send&gatewayNo=02 完全复制上面的链接文字段，文字段前后不要有空格等隐含多余字符，02部分对应网关标识编号。 公网IP：tcp.lewei50.com 完全复制上面的链接文字段，文字段前后不要有空格等隐含多余字符 3、添加测量设备，比如我添加了1个温度传感器，标识为T1。 客户端主动向服务器上传数据过程 该方法主要用于测量类型设备，比如有1个温度传感器，测到温度25度。 客户端主动上传数据步骤： 1、连接tcp.lewei50.com 或者IP：42.121.128.216 端口号：9960 2、发送登录注册信息 {"method": "update","gatewayNo": "02","userkey": "5d3eeec03bc747d7a23ab7d99c9340ea"}&^! 完全复制上面的完整数据，02部分替换成你网关的编号，5d3eeec03bc747d7a23ab7d99c9340ea部分替换成你自己的userkey用户编号。 注意：发送后服务器不会有反馈响应。 3、发送具体数据 {"method": "upload","data":[{"Name":"T1","Value":"25"}]}&^! 完全复制上面的完整数据，T1部分替换成你设备的标识，25部分替换成对应的设备数据。 注意：发送后服务器不会有反馈响应。 4、客户端数据发送完毕可以主动断开链接。 通过USB口通信控制GPRS数据传输 1、硬件连接 - 扩展板接到主控板UNO，SIM卡插好。 - USB线、外接电源接好。 2、下载程序 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX } 3、打开串口助手软件 S1按键拨到Comm端，S2按键拨到USB端。 Uart Select串口选择开关拨到中间。 打开串口助手软件，默认波特率为9600bps，勾选发送新行。此时STAT灯亮，模块启动，如果没有启动可以按下RST复位键，重新开启。 4、上传数据 步骤： AT 同步 AT+CSTT 设置APN AT+CIICR 激活移动场景 AT+CIFSR 获得本地IP地址 AT+CIPSTART="TCP","tcp.lewei50.com",9960 建立TCP连接 AT+CIPSEND 发送数据 出现“>” ，发送下面数据 {"method": "update","gatewayNo": "02","userkey": "5d3eeec03bc747d7a23ab7d99c9340ea"}&^! 输入完后按‘ctrl+z’即可 AT+CIPSEND 发送数据 出现“>” ，发送下面数据 {"method": "upload","data":[{"Name":"T1","Value":"25"}]}&^! 输入完后按‘ctrl+z’即可 此时可以在乐联网平台看到传输的数据 通过Arduino通信控制GPRS数据传输 1、硬件连接 扩展板接到主控板UNO，SIM卡插好。 USB线、外接电源接好。 2、下载程序 扩展板S1开关拨到Prog端，下载下面程序。 void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX //设置波特率 Serial.begin(9600); //等待call ready delay(5000); delay(5000); delay(5000); } void loop() { unsigned char t=25; //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(5000); Serial.println("AT+CIPSTART=\"TCP\",\"tcp.lewei50.com\",9960"); delay(5000); Serial.println("AT+CIPSEND"); delay(2000); Serial.print("{\"method\": \"update\",\"gatewayNo\": \"02\",\"userkey\": \"5d3eeec03bc747d7a23ab7d99c9340ea\"}&^!"); delay(2000); Serial.write(26); delay(5000); Serial.println("AT+CIPSEND"); delay(2000); Serial.print("{\"method\": \"upload\",\"data\":[{\"Name\":\"T1\",\"Value\":\""); Serial.print(t); Serial.print("\"}]}&^!"); delay(2000); Serial.write(26); delay(5000); while(1); } 将S1开关拨到Comm，S2开关拨到Arduino，Uart Select串口选择开关拨到中间。
产品外观 产品简介 Wifi Bee-RN-XV模块它是专门为那些将现有的802.15.4架构转移到TCP/IP平台，而不需要重新设计现有硬件的客户设计的。换句话说，如果你的项目是之前设置为XBee的，而你现在想将它移到WiFi网络标准。你只要将Wifi Bee插在同样的插座里，而不需要其他额外任何硬件设备。 Wifi Bee-RN-XV模块包含802.11 b/g无线发射机构，32位的处理器，TCP/IP堆栈、实时时钟、电源管理单元和模拟传感器接口。该模块预装Roving固件用以增加其集成度以减少对于使用者至关重要的应用程序的开发时间。在最简单实用的设置情况下,硬件只需要四个连接(电源，TX，RX和地)即可创建一个无线数据连接。 Wifi Bee-RN-XV模块广泛应用于美国、加拿大、澳大利亚、以色列和欧洲各国。建立射频通信不需要任何额外的配置而且模块的默认配置广泛的支持各种设备的应用程序。你还可以使用AT指令对该模块进行高级配置，完成你自己定制的一些特殊功能。 技术规格 普通的Xbee模块封装尺寸 4uA sleep mode， 38mA active的超低功耗 内载TCP/IP协议栈包括DHCP,UDP,DNS,ARP,ICMP,HTTP 客户端,FTP 客户端和TCP 固件配置发射功率：0dBm to 12dBm 硬件接口：TTL UART 主机数据传输速率：464Kbps 支持Adhoc和基础设施网络 7个通用的数字IO口 2个模拟传感器输入 具有时间戳，自动休眠，自动启动模式的实时时钟 3.3VDC稳压电源 带导线天线 引脚说明 兼容Xbee接口 开始Wifi之旅 根据以下一些简单的操作，配以图片的详细解说，您能快速的对Wifi Bee-RN-XV模块进行配置，快速开发您的项目，祝您旅途愉快。 我们需要的硬件 Xbee USB 适配器 x1+mini USB 线 x1 Wifi Bee-RN-XV模块 x1 路由器 x1 硬件连接 将您的 Wifi Bee-RN-XV 插入 Xbee USB 适配器。 将Xbee USB适配器通过USB线与电脑相连接。 配置硬件 Wifi Bee模块是通过串口指令进行配置的，所以我们要配置Wifi Bee模块之前首先需要一个计算机串口助手，现在百度上有很多优秀的串口串口助手，此处我们选用我们Arduino IDE自带的串口助手。 单击下图中的图标打开Arduino IDE 自带的串口助手，如下图所示。 把波特率设置为9600，在串口助手的文本框中会收到类似下图中的字样，说明模块正常工作，如下图所示。 设置串口为 no line ending 发送 $$$ 使得模块进入控制状态，模块自动回复CMD，说明模块进入了控制模式。设置串口为both NL&CR 发送exit 可以退出控制模式，如下图所示。 进入控制模式之后，设置串口为both NL&CR，输入show net ，模块返回当前网络设置，如下图所示。 输入scan可以显示附近Wifi网络清单，清单包括（按顺序）序号、通道、信号强度、Suite、Mac地址、无线网络名称，如下图所示。 如果您加入的网络没有密码，您可以直接使用join your router's SSID加入该网络， 如果您要加入一个有密码的网络，可以如下操作： set wlan ssid your router's SSID （例：“set wlan ssid DFRobot&Wifi” ）注意：原来的网络SSID为 DFRobot Wifi，因模块不识别空格，故用$代替空格。 set wlan pass your router's password（例：“set wlan pass 1234567890” ） save reboot 当Wifi Bee 重启之后，模块会自动连接选择的路由器 如下图： 如果一切顺利，则会显示以下画面，可以看出本模块IP为192.168.0.172端口为2000 使用浏览器输入http://192.168.0.172:2000可以看到串口助手收到如下图的数据 若您想使用静态IP，和自设定的端口，可以使用以下命令 set ip dhcp 0 取消DHCP使用静态IP set set ip localport 设置端口号 set ip address 设置静态IP save reboot 如下图： Wifi Bee模块与PC客户端连接 使用软件putty，可以在PC上与我们的Wifi Bee模块连接，但首先要确保我们的Wifi Bee模块与PC处于同一个路由之下。 打开putty，设置IP地址与其对应的端口，即可开始通信。 putty 设置 putty 通信 现在你可以通过任何串口助手和Arduino通信了！
产品简介 想象一下用Arduino或者IOS结合Arduino开发一款可穿戴的移动设备，比如智能手机、智能手环、智能计步器等等，这些可穿戴设备可以通过蓝牙4.0与你的手机通信。 通过低功耗的蓝牙4.0链接成星型的低功耗网络，达成快速的实时通讯，许多的软件工程师或者硬件工程师都希望有这样一个平台来实现以上功能。 BLE-LINK是基于蓝牙4.0的通讯模块，它采用XBEE造型设计，体积尺寸紧凑，兼容XBEE的扩展底座，适用于各种3.3V的单片机系统。它也可以实现两个蓝牙模块之间点对点无线透明传输，主从机设置，无线烧录程序，甚至与PC建立HID连接。 同时我们为开发者提供了极大的自由度和支持准备，用户不仅可以通过AT指令调试BLE-Link，而且可以通过USB更新BLE-Link的芯片程序。 BLE-LinK蓝牙4.0通讯模块可以使用XBEE底座插接到Arduino控制器上，从而实现蓝牙无线控制。 技术规格 蓝牙芯片： TI CC2540 工作频率： 2.4GHz 数据速率-最大值： 1Mbps GFSK 调制或协议： 蓝牙低功耗，V4.0 功耗： 工作时：平均10.6mA；待机：8.7mA 灵敏度： -93dBm 电压-电源： 3.3V 工作温度范围： -10 ℃ ~ +65 ℃ 最远传输距离： 30m左右（空旷地带） 尺寸： 32*22mm 支持通过AT指令调试BLE 支持主从机切换 支持串口透传 支持蓝牙远程更新Arduino程序（即蓝牙4.0无线编程，仅限于DFRobot的Bluno系列产品） 支持通过usb更新BLE固件 支持蓝牙HID 配套Android和IOS应用，开放的源码，适合用户二次开发 Android支持机型 配备蓝牙4.0Android 4.3及以上系统： Nexus 4+ 小米2s 三星Galaxy s4 三星Galaxy note 3 Apple支持机型 IOS 7.0+设备 iPhone 4S+ iPad 3+ iPad Mini iPod 5th Gen 引脚分布 Ble-link基础示例 这个章节里，您将学会如何用BLE-Link连接Apple 或者Android的设备 准备材料 BLE-LinK x1 Micro USB 线x1 Android 4.3+ 设备 或者 IOS设备 带有Xbee接口的Arduino设备 详细步骤 BLE-link的使用方法基本与BLUNO一致, 请参考BLUNO wiki的BLUNO基础示例章节(这是链接) 通过BLE-Link进行无线编程 在这个章节里，您将学会如何使用BLE进行无线编程。 准备材料 Ble-link x2 Micro USB 线 x2 XBee/Bluetooth Bee 适配器 x2 详细步骤 BLE-link的使用方法基本与BLUNO一致, 请参考BLUNO的Wiki中的"通过BLE进行无线编程"章节(这是链接) 升级BLE-Link上的BLE固件 BLE-link升级固件的方法和BLUNO相似, 请参考BLUNO的Wiki中"升级BLUNO上的BLE固件"章节(这是链接) 通过AT指令配置BLE设备 BLE-link通过AT指令配置BLE设备的方法和BLUNO相同, 请参考BLUNO的wiki中"通过AT指令配置BLE设备"章节(这是链接) 相关资料 BLE-LINK原理图 V1.0 BLE-LINK原理图 V1.1