如何发送和接收长数据HC-05

时间:2019-10-06 07:08:55

标签: esp8266

我有带HC-05蓝牙模块的ESP8266。

我需要将ESP8266的大数据发送到我的Android应用(无线)。

首先将HC-05和ESP连接在一起,并在ESP8266中编写代码(如下所示)。

在这里,我从ESP8266向Android应用发送了一些小数据(例如“用于蓝牙的S2终端”)。

如何从ESP8266发送结构数据(包含多个信息)? 请给我一些例子

谢谢。

#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino

BluetoothSerial ESP_BT; //Object for Bluetooth

int incoming;
int LED_BUILTIN = 2;

void setup() {
  Serial.begin(9600); //Start Serial monitor in 9600
  ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal
  Serial.println("Bluetooth Device is Ready to Pair");

  pinMode (LED_BUILTIN, OUTPUT);//Specify that LED pin is output
}

void loop() {
 
  if (ESP_BT.available()) //Check if we receive anything from Bluetooth
  {
    incoming = ESP_BT.read(); //Read what we recevive
    Serial.print("Received:"); Serial.println(incoming);

    if (incoming == 49)
        {
        digitalWrite(LED_BUILTIN, HIGH);
        ESP_BT.println("LED turned ON");
        }
       
    if (incoming == 48)
        {
        digitalWrite(LED_BUILTIN, LOW);
        ESP_BT.println("LED turned OFF");
        }     
  }
  delay(20);
}

1 个答案:

答案 0 :(得分:0)

您可以将数据转换为char(字节)数组,然后使用与发送字符串“用于蓝牙的S2终端”相同的命令进行发送。

所以目前您正在做Serial.write(“ S2蓝牙终端”);

您可以使用(打包的)结构发送多条信息。压缩意味着编译器不会插入任何多余的字节以进行对齐。

typedef struct {
    int data_num_a;
    int data_num_b;
    char[32] data_str_c;
    char[32] data_str_d;
} __attribute__((__packed__))data_msg_t;

因此,这是使用此方法发送数据的方式:

data_msg_t my_message;
my_message.data_num_a = 1234;
my_message.data_num_b = 5678;
memcpy(my_message.data_str_c, "String of up to 32 characters", 32);
memcpy(my_message.data_str_d, "other string", 32);

Serial.write((char*)&my_message, sizeof(my_message));