半熟前端

軟體工程師 / 台灣人 / 在前端的路上一邊探索其他領域的可能性

IoT

用 Arduino 與 ESP32 打造空氣品質監測應用(4)- WiFi 篇

本篇文章為系列文第四篇:

  1. 感測器介紹篇 - DHT11 與 MH-Z14A
  2. 資料溝通篇 - UART(實作是用 UART,所以只講 UART)
  3. Arduino 踩雷篇
  4. WiFi 篇:為了省下 Debug 的時間,我額外購買了 ESP32 開發版,本身已經含有 WiFi 跟藍芽功能
  5. (未上映)MQTT 篇:為了把資料傳給其他設備,使用了 MQTT 這個輕薄短小的通訊協定
  6. (未上映)Grafana / Web 篇:資料存在資料庫當然要用炫炮的方式顯示出來啊!這裡使用了 Grafana + Promethus 以及 Svelte 來顯示資料。

前言

一般要在 Arduino 上實作 WiFi 功能需要其他延伸模組,比較常見的晶片為 ESP8266。不過如果只購買 ESP8266 的話,全部的接腳都要自己焊接,Datasheet 也要自己啃完。如果想了解 WiFi 底層運作的話這是個很棒的練習,不過我們這次的目的是將整個點子實現,因此我購買了已經有內建 WiFi 與藍牙功能的 ESP32 開發版。

ESP32 開發版其實不只有 WiFi 功能,像是 GPIO 接腳、Serial 介面、UART 都有,也可以兼容 Arduino IDE 上傳程式碼,開發起來也很方便。所以其實就算不用 Arduino,光用 ESP32 也可以完成全部的功能。

WiFi 連接

#include "WiFi.h"

WiFiClient client;

void setup()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, PASSWORD);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Wifi is connected!");
}

void loop()
{
}

搭配 WiFi 函式庫的話,要建立 WiFi 連線還蠻簡單的,只要直接在 setup 裡頭呼叫 WiFi.mode 以及 WiFi.begin 就可以了。在這邊我沒有設定重新連線機制,所以失敗的話可能就要重新跑一次 Arduino。

連上 WiFi 之後能夠做的事情就很多啦!像是跑 HTTP Server、打 API 給伺服器、傳送感測資料給資料庫、實時監控等等。

在這邊我們想要做的事是透過 MQTT 傳送感測資料(溫濕度、二氧化碳濃度)給伺服器,剩下的邏輯全部交給伺服器處理。關於 MQTT 的部分我們下篇文章會一併介紹!