[ESP32]BT 藍芽 Relay

用 ESP32 的晶片,做一個藍芽控制的 Reley。
可用來控制相關電源類的東西.
IO 為 0。
rn+______  <=可以設定藍芽名稱
gn+            <=可以取得藍芽名稱
0                 <=切換 Relay 狀態

#include <BluetoothSerial.h>
#include <EEPROM.h>
 
BluetoothSerial BT;
String ReadBTString="";
String BTName="";
String cmd="";
String param ="";
bool IOStatus=false;
int RelayIO =0;              // Relay 用 IO 0

void setup() {
   // put your setup code here, to run once:
   Serial.begin(115200);

  //宣告使用EEPROM 11個位置
   EEPROM.begin(11);
   // 1    => Relay Status
   // 2~11 => BT Name

  //讀取EEPROM 1~11的位置,讀取 BT Name
   for (int i = 1; i < 11; ++i)
   {
    if(EEPROM.read(i)!=0)
       BTName += char(EEPROM.read(i));
   }
   BT.begin(BTName);//請改名
   Serial.println(BTName + “-> Start");
  
   pinMode(RelayIO,OUTPUT);
   

}

void loop() {
  
    //BT 接收與執行功能
    BTResvFunc();
  
  
}

void BTResvFunc()
{

  if(BT.available())
   { 
      ReadBTString="";
     
      while(BT.available())
      { 
        ReadBTString+=(char)BT.read();
        delay(1);  
      }
     
      //Command Chk
      StrChk(ReadBTString);

     //Do Switch Func
      if(cmd == “IO+")
         IO(RelayIO,IOStatus);

     //Do Switch Func
      if(cmd == “rn+")
        WriteEEPROM(1,11,param);

     //Do Switch Func
      if(cmd == “gn+")
        ReadBTName();

       
   }
}

void StrChk(String value)
{
    Serial.println(“Do StrChk Func");

   //reset cmd and param
    cmd = param ="";

   Serial.println(value);
    Serial.print(“[Length]");
    Serial.println(value.length());
   
    if(value.length() == 3)
    {
       cmd = “IO+";
       return;
    }
       
    for (int i = 0; i < value.length(); ++i)
    {
      if(i<3)
        cmd += value[i];
      else
        param += value[i];
    }
   
    Serial.println(“[CMD]"+cmd);
    Serial.println(“[Param]"+param);
 
}

void IO(int port,bool value)
{
   if(value)
   {
     Serial.println(“IO OFF");
     digitalWrite(port, LOW);
   }
   else
   {
     Serial.println(“IO ON");
     digitalWrite(port,HIGH);
   }
   IOStatus = !IOStatus;
}

void WriteEEPROM(int statidx,int endidx,String value)
{
   //寫入EEPROM 0~31的位置
   Serial.println(“writing eeprom ssid:");
   for (int i = 0; i < endidx; ++i)
   {
      Serial.print(“Wrote: “);
      if(i<value.length())
      {
       EEPROM.write(i + statidx, value[i]);
       Serial.println(value[i]);
      }
      else
      {
       EEPROM.write(i + statidx, 0);
       Serial.println(“");
      }      
   }

  EEPROM.commit();
}
void ReadBTName()
{
   BTName="";
  
     //讀取EEPROM 1~11的位置
   for (int i = 1; i < 11; ++i)
      BTName += char(EEPROM.read(i));

  Serial.println(“BTName:" + BTName);
   BT.println(BTName);
}

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s