Arduino 蓝牙通讯

废话不多说,先上代码:

#include <SoftwareSerial.h> 
SoftwareSerial BT(10, 11); 
char val;
int Red = 6;
int Green = 5;
int Blue = 4;
int pin1 = 8;
int pin2 = 9;
int speeda = 127;
char str1[]="speed:";
char str2[]="r/min";
void setup() {
  Serial.begin(9600); 
  pinMode(Red, OUTPUT);
	pinMode(Green, OUTPUT);
	pinMode(Blue, OUTPUT);
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  Serial.println("bluetooth is ready!");
  BT.begin(9600);                                                 
}
void LAMP(int i, int j, int k){
  analogWrite(Red,i);
  analogWrite(Green,j);
  analogWrite(Blue,k);
}
void speed(int speed1, int speed2){
  analogWrite(pin1, speed1);
  analogWrite(pin2, speed2);
}
void loop() {
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }
  if (BT.available()) {
    val = BT.read();
    if(val == 'r') LAMP(255, 0, 0);
    else if(val == 'g') LAMP(0, 255, 0);
    else if(val == 'b') LAMP(0, 0, 255);
    else if(val == 'z') speed(0, speeda);
    else if(val == 'y') speed(speeda, 0);
    else if(val == '+') speed(0, min(speeda+40,255));
    else if(val == '-') speed(max(speeda-40,0), 0);
    else if(val == 's') speed(0, 0);   
    Serial.print(val);
  }
}    

首先设置好蓝牙的从模块模式之后,进行配置手机上的按钮如下图所示:

进行验证
 

使用手机连接蓝牙,在蓝牙编辑器上设置相应的按钮,如图2所示,当按下按钮“红灯亮”时,手机端向蓝牙发送字符‘r,试验台红灯亮,当按下按钮“绿灯亮”时,手机端向蓝牙发送字符‘g,试验台绿灯亮,当按下按钮“蓝灯亮”时,手机端向蓝牙发送字符‘b,试验台蓝灯亮,当按下按钮“电机左”时,手机端向蓝牙发送字符‘z,试验台电机左转,当按下按钮“电机右”时,手机端向蓝牙发送字符‘y,试验台电机右转,当按下按钮“电机加速”时,手机端向蓝牙发送字符‘+,试验台电机进行加速,当按下按钮“电机减速”时,手机端向蓝牙发送字符‘-,试验台电机进行减速,当按下按钮“STOP”时,手机端向蓝牙发送字符‘s,试验台电机停止转动。

图 4红灯亮

图 5绿灯亮

图 6蓝灯亮

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP32和Arduino之间的蓝牙通信可以通过使用ESP32作为蓝牙服务器和Arduino作为蓝牙客户端来实现。以下是一个简单的例子,演示了如何在ESP32和Arduino之间进行蓝牙通信: 1. 首先,需要在ESP32上启用蓝牙服务器功能。可以使用Arduino IDE和ESP32的BLE库来实现。以下是一个简单的代码片段,演示了如何在ESP32上启用蓝牙服务器功能: ```c++ #include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h> BLEServer* pServer = NULL; BLECharacteristic* pCharacteristic = NULL; bool deviceConnected = false; bool oldDeviceConnected = false; uint8_t txValue = 0; #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; } }; void setup() { Serial.begin(115200); BLEDevice::init("ESP32_BLE_Server"); pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); BLEService *pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_INDICATE ); pCharacteristic->addDescriptor(new BLE2902()); pService->start(); BLEAdvertising *pAdvertising = pServer->getAdvertising(); pAdvertising->addServiceUUID(pService->getUUID()); pAdvertising->setScanResponse(true); pAdvertising->setMinPreferred(0x06); pAdvertising->setMinPreferred(0x12); BLEDevice::startAdvertising(); Serial.println("Waiting for a client connection to notify..."); } void loop() { if (deviceConnected) { pCharacteristic->setValue(&txValue, 1); pCharacteristic->notify(); txValue++; delay(10); // bluetooth stack will go into congestion, if too many packets are sent } if (!deviceConnected && oldDeviceConnected) { delay(500); // give the bluetooth stack the chance to get things ready pServer->startAdvertising(); // restart advertising Serial.println("start advertising"); oldDeviceConnected = deviceConnected; } if (deviceConnected && !oldDeviceConnected) { // do stuff here on connecting oldDeviceConnected = deviceConnected; } } ``` 2. 接下来,需要在Arduino上编写蓝牙客户端代码。以下是一个简单的代码片段,演示了如何在Arduino上连接到ESP32的蓝牙服务器并发送数据: ```c++ #include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX | TX void setup() { Serial.begin(9600); BTSerial.begin(9600); // HC-05 default speed in AT command more } void loop() { if (BTSerial.available()) { Serial.write(BTSerial.read()); } if (Serial.available()) { BTSerial.write(Serial.read()); } } ``` 在这个例子中,Arduino使用SoftwareSerial库将数据发送到ESP32的蓝牙服务器。可以使用Serial Monitor来查看从ESP32返回的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值