發表文章

目前顯示的是 11月, 2021的文章

MQTT-DashBoard+溫濕度+OLED-ESP32

圖片
MQTT-DashBoard+溫濕度+OLED-ESP32 先看一下demo 手機APP上的顯示 DashBoard上的顯示 前言 因為整個流程有點複雜,所以我把它寫成流程圖比較容易理解。 當時我的構想是想做天氣時鐘,試過用時鐘模組顯示時間,但因為模組 本身時間並不精準,所以只好取值用公開API來經過樹莓派的Broker的推送 讓ESP32訂閱topic,後來發現要讓時間和溫濕度不要以輪替的方式在OLED 上顯示,只好在ESP32用上DHT11讓其偵測溫濕度,本來有嚐試用按鈕來 切換時間和溫濕度,但有點麻煩,所以就只先全顯示在一個0.96的OLED 然後手機APP上也訂閱樹莓派的MQTT,另外在DashBoard增加一個開關來 控制ESP32上的LED。   接線圖 樹莓派Node-RED 開始之前 先備妥樹莓派上所須的軟硬體 安裝 Mosquitto broker (如果沒玩過樹莓派,請連結 這裡 安裝樹莓派系統和 如 何使用SSH和VNC鏡像 ) 安裝   Node-RED installed    和  Node-RED Dashboard 在樹莓派上。 備註:安裝Node-RED時若出現錯誤訊息改用下面所附下載    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) 接下來先測試BMP280是否可正常測溫度和壓力-請參考之前的紀錄( 點我傳送 )。 先來看一下整個發送原理比較容易理解自己要學的重點在哪裡 此次實驗我只寫從ESP32發送數據到樹莓派的Mosquitto代理接收/發送 然後通過MQTT通信協議去控制ESP32發送數據到Node-RED,其實我覺 得和ThingSpeak很類似,只是使用Node-RED更能客製化。 看一下這張圖 Node-Red配置 DashBoard配置檔-- https://github.com/blairan/esp32.git 手機端MQTTapp設定 原則上注意Topic要和NODE-RED上的一致才能訂閱和推送的到 payload是NODE-RED裡開關的控制項 程式碼 用到的函式庫,自行搜尋下載 U8g2lib Adafruit_Sen

使用u8g2強大的庫顯示中文在OLED上-ESP32

圖片
  使用u8g2顯示中文在OLED上-ESP32 前言 一般在顯示屏幕上,慣用SSD1306的函式庫,但看習慣了繁文,還是會想 在顯示屏上顯示中文,有一款庫就能實現中文顯示,那就是u8g2,所以就 來實作看看效果如何。 一,下載庫到IDE裡 我這裡使用的是VScode裡的platformIO這套真的好用 在Libraries裡搜尋u8g2 按下"Add to Project" 選擇當前的project之後按"add" 二,安裝中文字型所須中文字型制造包 到此處下載 https://github.com/olikraus/u8g2 主要是需要 u8g2/tools/font/ 這個目錄,所以直接把tools整個目錄Copy到project裡,例如我的位置在-->「 C:\Users\blair\Documents\PlatformIO\Projects\u8g2-oled-chinese\.pio\libdeps\esp32doit-devkit-v1\U8g2 」目錄中。 這時就可以在VS左側看到出現了tool的資料夾 其中在以下資料夾底下有個很重要的檔,主要是負責轉碼為中文字型的檔 三,加入字型 首先要把需要的字型加入一個「 U8g2\tools\font\build\chinese1.map 」檔案裡 打開後可以看到一整排 unicode碼 然後到線上漢字轉unicode的網站去轉檔 https://www.ifreesite.com/unicode-ascii-ansi.htm 一個字一個逗號+enter這樣排下來,轉出來的碼前面都有\u****,把它全複制起來,貼在記事本上。 然後用記事本的"取代"功能,將\u全部取代為$ 將上面貼到記事本並以\u取代為$的碼貼到 U8g2\tools\font\build\chinese1.map 最下方 接著用CMD視窗到DOS環境中,進入 C:\Users\blair\Documents\PlatformIO\Projects\u8g2-oled-chinese\.pio\libdeps\esp32doit-devkit-v1\U8g2\tools\font\bdfconv資料夾 執行以下指令: bdfconv.exe -v ../bdf/

OLED+DHT11溫濕度+LINE

圖片
OLED+DHT11溫濕度+LINE 前言 這次要來實驗菜市場傳感器😂-DHT11在OLED上顯示並且在LINE上通知 溫濕度。 接線 程式碼 關於DHT11可以參考 這篇 先測試傳感器使其能顯示於OLED上 #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_GrayOLED.h> #include <Adafruit_SSD1306.h> #include <Adafruit_Sensor.h> #include <DHT.h> #define DHTPIN 4     // Digital pin connected to the DHT sensor #define DHTTYPE DHT11     // DHT 11 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display ( SCREEN_WIDTH , SCREEN_HEIGHT , & Wire , - 1 ); DHT dht ( DHTPIN , DHTTYPE ); void setup () {   Serial . begin ( 115200 );   // Initialize device.   dht . begin ();   Serial . print ( "success connected!" );   if ( ! display . begin ( SSD1306_SWITCHCAPVCC , 0x3C )) {     Serial . println ( F ( "SSD1306 allocation failed" ));     for (;;);   }   delay ( 2000 );   display . clearDisplay ();   display . setTextColor ( WHITE ); } void loop () {   // Delay between measurement