首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用基于HM-10蓝牙模块的BLE Shield?

如何使用基于HM-10蓝牙模块的BLE Shield?
EN

Stack Overflow用户
提问于 2013-11-07 10:13:28
回答 3查看 22.9K关注 0票数 4

我是arduino项目的新bie。我想请你帮个忙。我从( http://imall.iteadstudio.com/development-platform/arduino/shields/im130704001.html )为阿杜伊诺买了一个BLE盾牌。他们使用Hm-10蓝牙模块(http://www.jnhuamao.cn/bluetooth.asp?ID=1)制作了这个盾牌。Itead Studio没有使用此屏蔽的示例代码。我不知道如何编程,也不知道如何从Arduino发送AT命令。

我阅读了数据表(ftp://imall.iteadstudio.com/Shield/IM130704001_ITEAD_BLE_Shield/DS_IM130704001_ITEAD_BLE_Shield.pdf)中的"AT命令“,并尝试使用此代码( http://arduino.cc/en/Reference/SoftwareSerial )将”at命令“从arduino发送到BLE,但我只收到了返回的命令。

这里有人用过这个HM-10蓝牙模块吗?

我需要一些arduino素描来帮助我!

EN

回答 3

Stack Overflow用户

发布于 2016-02-05 07:33:00

代码语言:javascript
复制
#include <SoftwareSerial.h>

  int led         = 13;
  int bluetoothTx = 2;
  int bluetoothRx = 3;
  SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); 
  int baudrate[8] ={4800,9600,14400,19200,28800,38400,57600,115200};
  int i = 1;

void setup() {
  Serial.begin(9600);
  bluetooth.begin(9600);
  while(!Serial){}

  Serial.write("AT sent");
  delay(500);
  bluetooth.write("AT+NAME?");
  delay(500);
  while (bluetooth.available()) {
     Serial.write(bluetooth.read());
   }
  delay(100);
  Serial.println("");

  bluetooth.write("AT+POWE3");
  delay(500);
  while(bluetooth.available()) 
  {
    Serial.write(bluetooth.read());
  }
  delay(100);
  Serial.println("");

  delay(500);
  bluetooth.write("AT+CHAR?");
  delay(500);
  while (bluetooth.available()) {
     Serial.write(bluetooth.read());
   }
  delay(100);
  Serial.println("");

  delay(500);
  bluetooth.write("AT+NAMEFlightline"); //Check Status
  delay(500);
  while (bluetooth.available()) {
      Serial.write((char)bluetooth.read());

    }

  Serial.println("");
  bluetooth.write("AT+CHAR0x2901"); //add charicteristic
  delay(500);
  while (bluetooth.available()) {
      Serial.write(bluetooth.read());

    }
  Serial.println("");
  bluetooth.write("AT+RELI0"); 
  delay(500);
  while (bluetooth.available()) {
      Serial.write(bluetooth.read());
    }
  Serial.println("");
  bluetooth.write("AT+SHOW1");
  delay(100);
  while (bluetooth.available()) {
      Serial.write(bluetooth.read());

    }
  Serial.println("");

  pinMode(led,OUTPUT);
  digitalWrite(led,HIGH);
}

void testAllBaudRates(){
  for(int j=0; j<8; j++)
   {
      bluetooth.begin(baudrate[j]);
      delay(100);
      Serial.println("boud rate " + String(baudrate[j],DEC) +" i-> "+String(j,DEC));
     // Serial.println("");
      bluetooth.write("AT");
      delay(500);
      while (bluetooth.available()) {
        Serial.write(bluetooth.read());
        Serial.println();
       }
       delay(100);
   }
}                                            

// and now a few blinks of the  LED, 
// so that we know the program is running

void loop()
{
  //Read from bluetooth and write to usb serial
  while(bluetooth.available())
  {
    char toSend = (char)bluetooth.read();
    if(toSend == 'x'){
       digitalWrite(led,HIGH);
       Serial.println("set high");
       bluetooth.write("RXOK");
    }else if(toSend == 'y'){
      digitalWrite(led,LOW);
      Serial.println("set low");
      bluetooth.write("RXOK");
    }
    Serial.print(toSend);

  }

  //Read from usb serial to bluetooth
  while(Serial.available())
  {
    char toSend = (char)Serial.read();
    bluetooth.write(toSend);
    Serial.print(toSend);
  }
}

看看我上面的草图,我有几件事要指出,我在上面浪费了时间。

确保你有一句台词

代码语言:javascript
复制
while(!Serial){}

或者,您可能得到了一个工作的盾牌,但错过了响应,因为串行监视器还没有准备好。

请记住,如果蓝牙模块连接到设备,则不会收到来自串行监视器的命令的响应。当指示灯停止闪烁时,它将连接到设备。

如果您运行此草图,应该会得到以下输出

代码语言:javascript
复制
AT sent
OK+Set:3
OK+Get:0x2901  <- this may be blank the first time you run it
OK+Set:Flightline
OK+Set:0x2901
OK+Set:0
OK+Set:1

可在此处找到最全面的AT命令列表

代码语言:javascript
复制
[All the AT commands and a good explanation][1]

您需要像我在这里所做的那样,检查设备的特征

代码语言:javascript
复制
bluetooth.write("AT+CHAR?");

或者你会发现它可以连接到iOS和安卓

如果你正在连接Android,请使用BluetoothLE类,而不是蓝牙类。

票数 3
EN

Stack Overflow用户

发布于 2015-10-04 15:34:31

您可以使用波特率自动检测this sketch来控制您的HM-10。这是Apploader project的一部分,允许通过BLE上传到Arduino板。

票数 1
EN

Stack Overflow用户

发布于 2014-03-05 14:28:46

这也有点晚了,但尝试以下代码,如果你发送"AT“,它应该会给你返回一个"OK":

代码语言:javascript
复制
#include <SoftwareSerial.h>  

int bluetoothTx = 2;  // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3;  // RX-I pin of bluetooth mate, Arduino D3

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  Serial.begin(9600);  // Begin the serial monitor at 9600bps

  bluetooth.begin(115200);  // The Bluetooth Mate defaults to 115200bps
  delay(100);  // Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
  // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
  bluetooth.begin(9600);  // Start bluetooth serial at 9600
}

void loop()
{
  if(bluetooth.available())  // If the bluetooth sent any characters
  {
    // Send any characters the bluetooth prints to the serial monitor
    Serial.print((char)bluetooth.read());  
  }
  if(Serial.available())  // If stuff was typed in the serial monitor
  {
    // Send any characters the Serial monitor prints to the bluetooth
    bluetooth.print((char)Serial.read());
  }
  // and loop forever and ever!
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19826749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档