HM-10 BluetoothモジュールをベースにしたBLEシールドを使用するには?

私はarduinoプロジェクトの新しいビーです。私はあなたにいくつかの助けを求めます。私はArduinoのBLEシールドを購入しました( http://imall.iteadstudio。 com/development-platform/arduino/shields/im130704001.html を参照してください)。彼らはHm-10 Bluetoothモジュールを使ってこのシールドを作った( http://www.jnhuamao.cn/ bluetooth.asp?ID = 1 )。 Itead Studioにはこのシールドを使用するサンプルコードはありません。私はそれをプログラミングする方法やArduinoからATコマンドを送る方法については全く知らない。

私はデータシートの "ATコマンド"を読みました( ftp://imall.iteadstudio.com /Shield/IM130704001_ITEAD_BLE_Shield/DS_IM130704001_ITEAD_BLE_Shield.pdf )、このコード( http://arduino.cc/en/Reference/SoftwareSerial )しかし、私はコマンドを受け取っただけです。

誰もこのHM-10 Bluetoothモジュールを使ったことはありますか?

私は助けのためにいくつかのarduinoスケッチが必要です!

4

3 答え

#include 

  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);
  }
}

上記の私のスケッチを見て、私は時間を無駄にしたことを指摘するいくつかのことがあります。

あなたがラインを持っていることを確認してください

while(!Serial){}

または、あなたは働いているシールドを得るかもしれないが、シリアルモニターが準備ができていないので、応答を見逃す。

あなたがデバイスに接続されている場合、シリアルモニタからのコマンドで、あなたは青い歯のモジュールからの応答を得ないことを覚えておいてください。ライトが点滅しなくなると、デバイスに接続されます。

このスケッチを実行すると、この出力が得られるはずです

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コマンドの最も包括的なリストは、ここで見つけることができます

[All the AT commands and a good explanation][1]

私がここでやったように、あなたはデバイスの特性にする必要があります

bluetooth.write("AT+CHAR?");

あなたはiOSとAndroidに接続することができます

Androidに接続している場合は、BluetoothのクラスではなくBluetoothLEのクラスを使用します。

2
追加された
私はあなたが何を意味するか分からない
追加された 著者 Mark Gilchrist,
別の質問を書いて、私はあなたのためにそのコードを投稿することができます
追加された 著者 Mark Gilchrist,
あなたは人類のために非常にスーパーでクイックなコードを書いています。どうもありがとう。私はそれをうまくやった!愛している。
追加された 著者 Bay,
どのように私たちは接続オプションなしで新しいBluetoothサービスを作ることができますか? Arduinoで?
追加された 著者 Bay,
あなたのコードを実行するときは、 "接続"ボタンをクリックして16進データを読み書きする必要があります。私はあなたのBLEのUUIDを示すように、データを送信することはArduinoの温度値のように接続する必要がないように思えるでしょうか?
追加された 著者 Bay,

ボーレート自動検出機能付きのこのスケッチを使用してHM-10を制御できます。これは、BLEを介してArduinoにアップロードできる Apploaderプロジェクトの一部です。

1
追加された

これはもう少し遅いですが、次のコードを試してください。 "AT"を送信すると、 "OK"を返します。

#include   

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
追加された
私は働いていません、とにかくあなたは何をしますか:bluetooth.begin(115200); ?? hm-10ボーは9600ですが、私はこの行を持っていません、デフォルトは115200ではありません、彼らは決して言いません。また、もしあなたがうまく接続して何も接続しようとしなかったならば
追加された 著者 Curnelious,