ESP32除了WiFi功能以外,片上还集成了低功耗蓝牙功能。它与我们在蓝牙音频等产品中可能会发现的传统蓝牙略有不同。BLE“服务器”(如ESP32读取传感器数据)可以定期“通知”客户端(如智能手机),而不是不断地传输数据。在与大家探讨蓝牙功能的使用方法之前,先给大家带来搭建ESP32开发环境的另一种方法:手动安装ESP32库
首先下载相关的文件(链接见文末)
把下载好的压缩包文件解压,安装步骤如图所示:
以上步骤完成,打开arduino IDE,选择ESP32 Dev Module板,新建一个工程,不要输入任何内容,编译不报错就算完成。
开发环境搭建好了,我们开始连接电路
这里使用了一个三色LED,给其中三个脚施加不同的电压,可以让二极管显示出多种颜色。可以用以下示例修改
//This example code is in the Public Domain (or CC0 licensed, at your option.) //By Evandro Copercini - 2018 // //This example creates a bridge between Serial and Classical Bluetooth (SPP) //and also demonstrate that SerialBT have the same functionalities of a normal Serial #include "BluetoothSerial.h" #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif BluetoothSerial SerialBT; void setup() { Serial.begin(); SerialBT.begin("ESP32test"); //Bluetooth device name Serial.println("The device started, now you can pair it with bluetooth!"); } void loop() { if (Serial.available()) { SerialBT.write(Serial.read()); } if (SerialBT.available()) { Serial.write(SerialBT.read()); } delay(20); }
这里面的 Serial.read() 是读取我们手机发送的数据。也就是用来接收数据的,如果按照示例的设计的话,数据会丢掉的。而手机APP发送的数据是字符的形式发送过来的。我们通过数组循环接收数据
int i; char BT[9] = {0}; for (i = 0; i < 9; i++) { BT[i] = SerialBT.read(); } }
这里接收到的数据有九个,因为有R,G,B三种颜色,而每一种颜色有255种变化,所以就有九个数据。但是有时也会只有八个数据,我们可以判断BT[8]这一个数据:
if (BT[8] ) { Serial.println("OK "); red = chartonumber(BT[0])*100+chartonumber(BT[1])*10+chartonumber(BT[2]); green =chartonumber(BT[3])*100+chartonumber(BT[4])*10+chartonumber(BT[5]); blue = chartonumber(BT[6])*100+chartonumber(BT[7])*10+chartonumber(BT[8]); Serial.print(red); Serial.print(" "); Serial.print(green); Serial.print(" "); Serial.println(blue); } else { Serial.println("NO "); red = chartonumber(BT[0])*10+chartonumber(BT[1]); green =chartonumber(BT[2])*100+chartonumber(BT[3])*10+chartonumber(BT[4]); blue = chartonumber(BT[5])*100+chartonumber(BT[6])*10+chartonumber(BT[7]); Serial.print(red); Serial.print(" "); Serial.print(green); Serial.print(" "); Serial.println(blue); }
里面的 chartonumber()是把字符数据转换成整形数据。我定义了一个宏定义:
#define chartonumber(x) (x-'0')
里面的X就是你自己需要转换的数据,x-‘0’是根据ASCAll表得出的。就是字符数字必整形数据间隔了一个‘0’。
/* ESP32蓝牙控制RGB-LED 功能:使用手机蓝牙APP来控制RGB-LED颜色的变换 引脚:R->25 G->26 B->27 */ #include "BluetoothSerial.h" #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif #define chartonumber(x) (x-'0') BluetoothSerial SerialBT; long int val = 0; uint8_t ledR = 25; uint8_t ledG = 26; uint8_t ledB = 27; int i; char BT[9] = {0}; int red = 0; int green = 0; int blue = 0; void setup() { Serial.begin(); ledcAttachPin(ledR, 1); //引脚的通道 ledcAttachPin(ledG, 2); ledcAttachPin(ledB, 3); ledcSetup(1, 12000, 8); // 12 kHz PWM,8位的分辨率 ledcSetup(2, 12000, 8); ledcSetup(3, 12000, 8); } void loop() { if (Serial.available()) { SerialBT.write(Serial.read()); } if (SerialBT.available()) { delay(50); for (i = 0; i < 9; i++) { BT[i] = SerialBT.read(); } } if (BT[8] ) { Serial.println("OK "); red = chartonumber(BT[0]) * 100 + chartonumber(BT[1]) * 10 + chartonumber(BT[2]); green = chartonumber(BT[3]) * 100 + chartonumber(BT[4]) * 10 + chartonumber(BT[5]); blue = chartonumber(BT[6]) * 100 + chartonumber(BT[7]) * 10 + chartonumber(BT[8]); Serial.print(red); Serial.print(" "); Serial.print(green); Serial.print(" "); Serial.println(blue); } else { Serial.println("NO "); red = chartonumber(BT[0]) * 10 + chartonumber(BT[1]); green = chartonumber(BT[2]) * 100 + chartonumber(BT[3]) * 10 + chartonumber(BT[4]); blue = chartonumber(BT[5]) * 100 + chartonumber(BT[6]) * 10 + chartonumber(BT[7]); Serial.print(red); Serial.print(" "); Serial.print(green); Serial.print(" "); Serial.println(blue); } ledcWrite(1, (255 - red)); ledcWrite(2, (255 - green)); ledcWrite(3, (255 - blue)); delay(100); }
ESP32开发环境下载地址
https://static.qutaojiao.com/wp-content/uploads/2018/08/arduino-esp32-master.zip
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/15863.html