ESP32函式筆記本



ADC類比輸入電壓範圍和取樣位元

analogSetAttenuation(衰減值)

衰減值
ADC_0db---1.00V
ADC_2_5db---1.34V
ADC_6db---2.00V
ADC_11db---3.6V
-------------------------------------------------------------------
analogSetWidth(寛度)

寛度---ADC取樣位元數

陣列宣告

資料型別 陣列名[元素數量];
例如:
LED[4]={1,2,3,4}

迴圈

for (計數起點; 範圍; 變數累計)
{
     
}
例如:
for (int  i=0; i<5; i++)
{
    digitalWrite(led, HIGH);
}

字串

範例:
會報錯
using namespace std;  //---使用命名空間
string w1 = "若天有情";
string w2 = "若地有義";
void setup(){
    Serial.begin(115200);
    Serial.println(s1+s2);
}

void loop()
{

}

正確的寫法要將s1和s2轉換成c風格的字串
using namespace std;  ---使用命名空間
string w1 = "若天有情";
string w2 = "若地有義";
void setup(){
    Serial.begin(115200);
    Serial.println((s1+s2).c_str());
}
void loop()
{

}

類比

類比輸入

analogRead( 接腳編號);

例如:analogRead(24);
傳回0~4095之間的值

數位值和電壓轉換公式
數位值=4095/3.3V * 輸入電壓

電壓值=3.3V*數位值/4095

類比輪出
esp32有兩個指定DAC通道,gpio25,gpio26

dacWrite(通道, 輸出指定值 );

輸出指定值=255/3.3V * 想輸出的電壓

PWM
伺服馬達
ledcSetup(0, 500010);---範例
ledcAttachPin(50);
ledcWrite(0, val);

DC直流馬達
ledcSetup(0, 3000, 8);---範例
ledcAttachPin(50);
ledcWrite(0, val);

#ledcSetup(uint8_t 通道(0~15個通道), double 頻率(5000Hz)uint8_t 解析度)---格式
#ledcAttachPin(uint8_t 腳位uint8_t 通道)
#ledcWrite(uint8_t 通道, uint32_t 值(0~255))

藍芽

匯入函式庫

#include <BluetoothSerial.h> ---匯入函式庫
BluetoothSerial myBT; ----建立物件

從端(一般預設)初始化藍芽並建立藍芽名稱

myBT.begin("藍芽名稱自取");

主端初始化藍芽並建立藍芽名稱

如果加true,就是master,沒有加true就是預設從端
myBTmaster.begin("藍芽名稱自取"true);

其它相關函式

myBT.available() ---檢查藍芽有無外部送進來的資料

myBT.read(); ----讀取藍芽的資料

myBT.printf(); --透過藍芽發送資料

主端物件名.connect(slave); --連接藍芽從端


WiFi

WiFi.begin(“基地台稱” , “密碼” )

例如:

const char *ssid = "基地台名稱";

const char *password = "密碼";

void setup(){

    WiFi.begin(ssid, password);

}

void loop(){

}

其它設定

WiFi.localIP();

取得IP位址


WiFi.subnetMask();

取得子網路遮罩


WiFi.gatewayIP();

取得閘道IP


WiFi.dnsIP();

取得網域名稱伺服器(DNS)的IP


WiFi.macAddress();

取得ESP32的MAC位址(ESP32網路身份編號)

WiFi.softAP("SSID名稱")

softAP("SSID", 密碼, 通道)
SSID:基地台名稱
密碼:基地台密碼
通道:1~13個通道可供選擇

softAPConfig(IP位址, 閘道IP位址, 子網路遮罩)
須注意上面挎號裡預設值分別為192.168.4.1,192.168.4.1,255.255.255.0
一般IP位置和閘道IP位址設定相同


WebServer server(80);
建立物件名為server,監聽伺服器埠號80並等候連線,一般會配合函式庫<WebServer.h>取用之後來命名設定。

server.begin();
伺服器初始化,沒初始化會無法開啓網頁

server.send(HTTP Code, 訊息標頭, 傳輸內容);
HTTP Code: 404表示not found,200表示OK
訊息標頭:text/plain; charset=UTF-8(回傳客戶端訊息標頭)
傳輸入容: 傳送給客戶端的訊息顯示於瀏覽器頁面上

server.on("/", handleRoot);
客戶端請求esp32伺服器的根目錄(/),會呼叫handleRoot()這個自訂函式處理相關動作。
OLED

Adafruit_SSD1306 display(WIDTHHEIGHT&Wire, OLED_RESET)

display---被宣告的名稱,可自行命名
WIDTH----螢幕的寛
HEIGHT----螢幕的高
&Wire----使用i2c的傳輸,&表示直接代入
OLED_RESET----以實體OLED決定,有的OLED有RESET,這時就要接入GPIO
並定義接腳,若無RESET在這裡定義為-1

display.clearDisply()---清除螢幕
display.display()---顯示文字或圖形
display.Cursor(x, y)----設定螢幕座標
display.setTextSize(n)---設定文字大小
display.setTextColor(c1, c2)---一般白底黑字就是display.setTextColor(BLACK, WHITE)
display.print()display.println()---顯示內容,一個有換行一個無換行

中斷函式(interrupt)

attachInterrupt(digitalPinToInterrupt(GPIO), function, mode)
digitalPinToInterrupt(GPIO)---->設定想要被檢測的接腳
例如:digitalPinToInterrupt(17)
function---->每次觸發中斷都會調用的函式
mode--->這裡有五種不同的參數可以設定
  1.   LOW:當引腳為低電平時觸發中斷;
  2.         HIGH:當引腳為HIGH時觸發中斷;
  3.         CHANGE:每當引腳更改值時觸發中斷 - 例如從高到低或從低到高;
  4.         FALLING:當引腳從高電平變為低電平時;
  5.         RISING:當引腳從低電平變為高電平時觸發。
計時器(Timer)

delay(milliseconds)--->毫杪
##這個函式會使整個程式流程暫停
例如:delay(1000)-->暫停1秒

millis()

使用一個叫做 millis() 的函數,您可以返回自程序第一次啟動以來經過的毫秒數。
通過使用一些數學運算,您可以在不阻塞代碼的情況下輕鬆驗證已經過去了多少時間。






留言

這個網誌中的熱門文章