How to use BLE Shield based on HM-10 bluetooth module?

后端 未结 3 1389
名媛妹妹
名媛妹妹 2021-02-10 15:36

I\'m a new bie on arduino projects. I would like to ask you for some help. I bought a BLE Shield for Arduino from ( http://imall.iteadstudio.com/development-platform/arduino/shi

相关标签:
3条回答
  • 2021-02-10 15:40
    #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);
      }
    }
    

    Have a look at my sketch above I have a few things to point out that I wasted time on.

    make sure you have the line

    while(!Serial){}
    

    Or you may get have a working shield but miss the responses as the serial monitor is no ready.

    remember that you wont get a response from the blue-tooth module, with a command from the Serial Monitor if it is connected to a device. It is connected to the device when the light stops flashing.

    if you run this sketch you should get this output

    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
    

    the most comprehensive list of AT commands can be found here

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

    You will need to at Characteristics to the device as I have done here

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

    or you will find it to connect to iOS and Android

    If you are connecting to Android use the BluetoothLE Classes not Bluetooth ones.

    0 讨论(0)
  • 2021-02-10 15:49

    This is a little late too, but try the following code, if you send it "AT" it should give you back an "OK":

    #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 讨论(0)
  • 2021-02-10 16:00

    You can use this sketch with baud rate autodetect to control your HM-10. This is a part of Apploader project that allows to upload to Arduino board over BLE.

    0 讨论(0)
提交回复
热议问题