iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

Maker making IoT !!系列 第 13

[Day12] Esp32s用AP mode + LED - (認識序列埠監控視窗&程式碼講解)

1.前言

看完上一篇的利用Esp32s的AP mode控制LED燈了吧,是不是覺得很神奇阿,那本篇會稍微在說明程式碼的流程,這邊說明一下本篇的內容會是,重點介紹上篇實作程式碼核心的部分,後面的系列篇章也會以這樣的下去寫,一篇實作,下一篇就會是介紹,直到結束(耍廢功能開啟),那就開始本篇內容。

2.序列埠監控視窗

序列埠監控視窗位於Arduino IDE中右上方的放大鏡icon ,該地方後面會看見空白視窗(要插開發版才可以開啟),這個地方是可以觀察程式運作到哪行,而這視窗也是要特別去寫程式碼才會有資訊跑出來的,不然像是第一次教的呼吸燈就不會顯示資訊,所以會教如何讓序列埠監控視窗跑出訊息。
那我們先講解鮑率(Baud rate),鮑率就像頻道一樣,我可以自由切換許多不同頻道,但是每個頻道都有屬於自己的傳輸大小,像是上一篇程式碼中有一段是說

Serial.begin(115200);

這就是在說我要設置序列埠監控視窗的鮑率為115200,也就是說開發板(Esp32s)會跟電腦建立連結,而每秒資料傳輸115200 bit/s;現在大家都會設定鮑率了對吧,那設定完之後就是要輸出文字,在上次的『Day7 函式(數)介紹-Part2-1』有介紹到String這個資料型態,那String主要目的是顯示文字給使用者看,要透過什麼顯示?

  • Serial.print()
  • Serial.println()

這兩種區別是,後不會在最後你輸出文字後自動換行,而Serial.print()不會自動幫你換行,所以當你下次輸出訊息時,會繼續接在後方,而Serial.println()就會在輸出文字後自動換行。

void setup(){
    Serial.begin(115200);
}
void loop(){
    Serial.print("Hello ");
    Serial.println("World");
    Serial.println("test");
}

那輸出結果會是

Hello World
test

各位可以嘗試看看,記得要插上開發板,且記得要燒錄至晶片,然後要記得點開監控視窗,如果看到字會重複跑出來是正常現象,因為程式寫在loop當中,因為loop會重複跑自己區塊內的程式碼
有些人可能在開啟監控視窗後,會發現怎麼是亂碼?
那是因為電腦這方的鮑率沒設置好

圖片取自:使用者繪製

調整成自己設置的鮑率就可以正常顯示囉。

圖片取自:使用者繪製

如果覺得跑太快可以加個delay(10000),可能每跑完一次就間隔10秒在跑。

3.程式碼講解

接下來開始講解程式碼,這邊指挑核心程式碼說明,而不會全部說明,因為其他的程式碼大多都是固定的輸出格式一般我們不太需要去改動到。

#include <WiFi.h>

// Replace with your network credentials
const char* ssidAP     = "xxxx"; //Esp32s基地台名稱(隨便都可以,要英文且盡量不要跟附近的WiFi撞名)
const char* passwordAP = "xxxxxxxx";//Esp32s基地台密碼(至少要8碼,例如12345678)

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output0State = "off";
String output2State = "off";

// Assign output variables to GPIO pins
const int output0 = 23;
const int output2 = 22;

那此次要講解的程式碼是前面宣告的部分,那第一、四行先跳過,我們這次先不講,交給後天的我在講解,那我們就從第四行開始

const char* ssidAP     = "xxxx"; 
const char* passwordAP = "xxxxxxxx";

之前在前面幾篇講解過資料型態,那現在前面又多了個const又是什麼意思?其實const就像是把資料上鎖起來一樣,只要給變數數值,那這之後就無法更改變數裡面的數值,那const就主要就是儲存已經固定的值,像是圓周率(3.14),像是這種值就不會有更動的可能,所以就加const防止不小心更動到變數中的值。

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output0State = "off";
String output2State = "off";

// Assign output variables to GPIO pins
const int output0 = 23;
const int output2 = 22;

其實這邊都是資料型態跟變數的運用。
第2行、事先定義變數header,且型態是String(字串)
第5、6行,定義兩個為String的變數,並放入off的字串
第9、10行,定義兩個為int的變數,且裡面先放入22、23的整數,那這邊這麼做主要是在void setup()時,可以pinMode()直接靠變數名稱就定義腳位在哪。

歡迎交流

好了,今天就先介紹這邊,因為在進入void setup()前通常會先行定義變數的部分,那這部分都跟先前講解的資料型態那篇有關,所以對這邊還是有點不了解的可以去前幾篇回顧一下,那就明天見拉~


上一篇
[Day11] Esp32s用AP mode + LED
下一篇
[Day13] Esp32s用STA mode + LED
系列文
Maker making IoT !!30

尚未有邦友留言

立即登入留言