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, 5000, 10);---範例
ledcAttachPin(5, 0);
ledcWrite(0, val);
DC直流馬達
ledcSetup(0, 3000, 8);---範例
ledcAttachPin(5, 0);
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(WIDTH, HEIGHT, &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--->這裡有五種不同的參數可以設定
- LOW:當引腳為低電平時觸發中斷;
- HIGH:當引腳為HIGH時觸發中斷;
- CHANGE:每當引腳更改值時觸發中斷 - 例如從高到低或從低到高;
- FALLING:當引腳從高電平變為低電平時;
- RISING:當引腳從低電平變為高電平時觸發。
計時器(Timer)
delay(milliseconds)--->毫杪
##這個函式會使整個程式流程暫停
例如:delay(1000)-->暫停1秒
millis()
使用一個叫做 millis() 的函數,您可以返回自程序第一次啟動以來經過的毫秒數。
通過使用一些數學運算,您可以在不阻塞代碼的情況下輕鬆驗證已經過去了多少時間。
留言
張貼留言