一 . ESP32-S簡介

二 . 示例程式
/*********************匯入庫*************************/
#include <BluetoothSerial.h>
#include <ArduinoJson.h>
#include <WiFi.h>
/**********************初始值************************/
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
static String data_app;
BluetoothSerial SerialBT;
//****************初始化聯網*************************
bool init_wifi(){
int count = 0;
WiFi.begin();
while(WiFi.status()!=WL_CONNECTED){
Serial.print(".");
delay(500);
count++;
if (count==20){
return false;}}
return true;
}
/**********************初始化*************************/
void setup() {
Serial.begin(115200);
WiFi.hostname("myESP32");
SerialBT.begin("myESP32");
Serial.println("現在可進行藍牙配對!");
if(init_wifi()){
Serial.println();
Serial.println("wifi連接成功");
}else{
Serial.println();
Serial.println("wifi連接失敗請使用藍牙配網");
}
}
/**********************自回圈************************/
void loop() {
bluetooth();
}
/***********************藍牙*************************/
void bluetooth() { //接收藍牙資料
if (Serial.available()) { //用于除錯
SerialBT.write(Serial.read());
}
if (SerialBT.available()){
data_app = "";
data_app = SerialBT.readString();
Serial.print("接收資料為:"); //用于除錯
Serial.println(data_app); //用于除錯
if (data_app=="ip_mac"){
String ip_mac = ipmac();
SerialBT.println(ip_mac);
Serial.println(ip_mac);
}
else if(data_app.indexOf("ssid")!=-1){
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, data_app);
if (error) {
Serial.println("資料格式錯誤"); //用于除錯
SerialBT.print("Incorrect format of incoming data");
}
else {
String sid = doc["ssid"];
String pwd = doc["password"];
if (sid!="null"){
Serial.printf("SSID:%s\r\n",sid); //用于除錯
if (pwd=="null"){
pwd = "";
}
Serial.printf("PAWD:%s\r\n",pwd); //用于除錯
if(wifiPW(sid,pwd)){
SerialBT.println("True");
}else{
SerialBT.println("False");
}
}
else {
Serial.println("未識別到wifi資料"); //用于除錯
SerialBT.print("Incorrect format of incoming data");
}
}
}
else{
Serial.println("未接收到指令"); //用于除錯
SerialBT.print("Incorrect format of incoming data");
}
}
}
bool wifiPW(String sid,String pwd){//配網
WiFi.begin(sid.c_str(), pwd.c_str());
int count = 0;
delay(1000);
while (WiFi.status()!=WL_CONNECTED){
Serial.print(".");
delay(500);
count++;
if (count>20){
Serial.println();
Serial.println("配網失敗");
return false;}
}
Serial.println();
Serial.println("配網成功");
return true;
}
String ipmac(){//獲取ip、mac地址
if(WiFi.isConnected()){
String ip = WiFi.localIP().toString();
String mac = WiFi.macAddress();
return "{'ip':'"+ip+"','mac':'"+mac+"'}";
}else{
return "Not connected to wifi";
}
}
/****************************************************/
三 . 示例程式說明

四 . 注意事項
- 需要用到的庫:
#include <BluetoothSerial.h>
#include <ArduinoJson.h>
#include <WiFi.h>
- 此函式可以連接到上次連接成功的wifi
WiFi.begin();
- 以下函式分別設定設備名以及設備藍牙名稱
WiFi.hostname("myESP32");
SerialBT.begin("myESP32");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375015.html
標籤:其他
