我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


近年來隨著人工智慧及物聯網產業的興起,教育部也越來越重視如何帶領學生實做這類程式教育課程,而Arduino易學易用,能快速開發感測與互動程式,成為程式課程的主流教材。Arduino的特點是所有軟硬體都開源,感測器種類繁多價格便宜,學生在設計程式專題時,能很快的找到合適的元件接線組裝,完成程式撰寫,可以說是初學者學習程式最重要的教材之一。

目前市面上最普遍的是Arduino UNO板,網路售價大概在100~200之間。UNO板最容易取得,可用感測器也多,不過卻缺少了網路及藍牙元件,物聯網課程中「通訊」是非常重要的一環,缺少了網路通訊,只能做本地端感測互動,沒有資料收集、雲端圖表、LINE互動、智慧家庭、語音或圖像分析…等功能,筆者覺得物聯網課程缺少了網路,不能叫做物聯網了。

UNO雖然可以加裝網路、藍牙(HC05)元件,但要另外採購,且接線、通訊設定、AT COMMAND等問題,會打亂教學流程,此時由樂鑫科技(ESPRESSIF)所開發內建WiFi的ESP8266晶片則是承接了這個需求缺口。

ESP8266一樣採用Arduino開放性架構,呼叫內建的ESP8266 WiFi.h函式庫就可以連上網路讀取資料,因此ESP8266曾經風靡一陣子,但後來發現ESP8266只有一組類比感測(analogRead),如果學生在製作專題需要使用到兩組類比感測器時,就必須再回去使用UNO,並沒有改善教學上的問題。

因此樂鑫再次推出ESP32這款殺手級Arduino相容晶片,ESP32不僅內建有WiFi及低功率藍牙BLE,可用腳位也擴增到約26根,大部分腳位同時支援類比及數位,內建霍爾、溫度、觸控感測器,主頻高達260mHz的雙核心CPU,傳輸界面SPI、I2C、UART等強大的功能,而價格上也相當有競爭力,不僅可以演練所有目前現有UNO課程,也可以利用內建的網路及藍牙等通訊元件完成更多的應用專題。

下表整理目前常見物聯網課程所使用的UNO、ESP8266及ESP32等三種開發板的規格比較:

由上表比較可知,ESP32充分改進ESP8266的缺失,加上經濟實惠的價格,足以讓ESP32成為IoT課程最佳的教學工具,且ESP32與UNO所有週邊感測元件完全相容,可以無痛直接升級ESP32。

ESP32有很多不同版本,每種都各有特色,目前市面上常見包括下列幾種:價格便宜的Doit ESP32 Dev Kit、附帶OLED的Lolin ESP32、18650電池座ESP32-TTGO、附帶相機及SD卡槽的ESP32-CAM、附帶光環LED及麥克風的HaloCode、縮小板ESP32-mini…等等,使用者可以依據需求採購合適的ESP32,常見的ESP32版本製表如下。
關於ESP32使用相容Arduino IDE開發環境建立,請參考本篇:第一篇 ESP32 Arduino開發環境架設(取代Arduino UNO及ESP8266首選)

image image
NodeMCU-32s
特點:建議使用,原因將於後一節說明
價格:約250-300

DOIT DEVKIT
特點:價格便宜,但缺少5V輸出
價格:約150-200

image image
TTGO ESP32
特點:附帶18650電池座,搭配深度睡眠(deepsleep),一顆電池可用一個月以上
文章標籤

夜市 小霸王 發表在 痞客邦 留言(4) 人氣()

最近在寫一個程式,要再網頁播放音效,而且是分成很多段,這段播完換那段,寫成android跟PC一直正常,放到ios才發現不可以,不只是ios的safari,連ios中的chrome也不能,查了才發現原來ios禁止非使用者主動的播放音效,一定要透過互動,例如點螢幕、按按鈕之類,目的是保護使用者,避免被嵌入的音效檔吃掉流量。ios真的很會替使用者想很多。

好吧那就點了播放音效吧,結果發現只能點一個播一樣,我這個APP要重複不斷一直播很多不同的音效,查一下網路,可以把音效物件宣告廣域,然後這個物件就可以重複使用,不須在經過使用者互動。

宣告廣域變數
soundEffect = document.createElement('audio');

點選按鈕或圖片時
soundEffect.setAttribute('src', '');//指定位置為空
soundEffect.play();//播放音效,但不需要真的聲音,因為位置為空

真的要播音效時
soundEffect.setAttribute('src', 'countdown05.mp3');//指定真正的影片位置
soundEffect.play();//播放音效

由於soundEffect宣告為廣域,因此可以重複利用。


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近在寫網頁,發現設定一個img標籤,用onclick竟然無效,還以為是一定要用button,結果竟然只是img如果有設定id,那id不可與onclick的function相同。

就這麼簡單。

例如

<img id="clickimg" src="" onclick="clickimg()"/>

改成

<img id="clickimg" src="" onclick="imgclick()"/>


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


一個夥伴傳來一個用esp8266播放mp3的架構,要我幫忙改成ESP32版本,原本我一直以為它是用dfplayer的,沒想到竟然是直接接在esp8266的rx腳位播放,除了SD卡外,沒有外加任何裝置,靠著的是軟體Lib dac做mp3解碼。
查了一下是採用esp8266audio這個lib(這個lib同時適用esp32),在此借花獻佛先提供8266的程式碼及接線方式。
一、材料準備
1.ESP8266任意版本皆可
2.SPI界面SD讀卡機及一片SD卡,像這款: https://goods.ruten.com.tw/item/show?21652913575950

3.內建擴大器喇叭,像是一般的電腦用喇叭即可,主要是因為rx腳位本身沒有電壓輸出,所以不能使用8歐姆那種沒有內建擴大器的speaker
4.各式杜邦線數條
二、硬體接線
1.先將SD讀卡機接在ESP8266的SPI腳位(CS, MISO, MOSI, SCK)
2.將擴大器喇叭的音源正負極同時接在rx上
3.再次提醒,要使用有擴大器的喇叭,將喇叭接上電源

image

三、程式設計

首先至github下載esp8266audio函式庫: https://github.com/earlephilhower/ESP8266Audio

點選右上角Clone or download/Download Zip

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


ESP32擁有兩個核心,不過平常都只用到一個核心,這樣是不是很浪費,我們如何善用增加效能呢?或者如何使用平行處理呢?本章分為三個部份解說:
一、    多核心概念
二、    顯示執行核心
三、    雙核心執行

一、多核心概念
我們常聽到說我的手機有4核心,電腦有8核心,所謂的多核心(Multi-core)簡單的說就是CPU能同時處理較多的任務且不會互相干擾,另外一種虛擬的多核心稱為多執行緒(Thread)則是CPU的分時多工,非本篇的討論範圍,由於ESP32有著240/160MHz的雙核心CPU,因此本篇將要說明是能將任務指定給核心執行的「xTaskCreatePinnedToCore」函數。

雙核心執行有什麼好處?例如可以增加效能,或者平行處理,舉例而言,我們有一個工作是要偵測現場溫濕度並上傳資料庫存檔,每20秒感測上傳一次,假定這項規定很嚴格,必須準時上傳不能有延遲,在以往程式的撰寫流程下,感測與網路上傳是寫在同一個程序內,也就是讀取溫濕度→上傳資料庫→等候20秒,但是上傳資料庫須看網路是否擁塞,假設上傳時間花了3秒,再加上等候20秒後,等於是23秒過了,長久下來就會延遲越來越多。

也許你會想說我們可以將等候時間改成17秒,這樣上傳時間3秒加起來剛好20秒,不過你也知道網路不是那麼好預估,有時候鄰居下載迷片,速度就慢了,而半夜時沒人速度又變得飛快,這樣我們總是沒辦法找到一個時間來補回。

而多核心在這裡就非常適用,也就是一個核心負責讀取溫濕度資料,另外一個核心則將資料送到資料庫,平行處理兩者互不相干,就可以固定總時間不變,而這就是雙核心CPU時的好處。
image

二、顯示執行核心
一般我們的程式都僅在ESP32的核心1執行(核心編號1),所以根本沒用到第2個核心(核心編號0),為了證明,我們可以透過xPortGetCoreID()函數來顯示現在使用到哪一個核心,例如我們寫一個簡單的HelloWorld,來測試看看。


void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("HelloWorld!");
  Serial.print("使用核心編號:");

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


OTA系列文

1. Basic OTA:https://youyouyou.pixnet.net/blog/post/121228330

在Arduino IDE中形成一個虛擬的Port,選擇該Port即可上傳新的程式,僅能使用在區域網路

2. OTAWebUpload:https://youyouyou.pixnet.net/blog/post/121228586

ESP32會變成一台Webserver,透過ESP32的網頁上傳ArduinoIDE編譯過得bin(binary)檔,須使用者主動上傳程式碼,且公用IP取得不易

3. HTTP Update:https://youyouyou.pixnet.net/blog/post/121228592

將編譯好的bin檔放在一個公開的網站上,讓ESP32主動下載,目前商用環境最常使用的方式

4.Stream Update:透過MQTT將編譯好的bin檔直接上傳到ESP32中

目前筆者尚無實做


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


更新中,可先參考本篇: https://youyouyou.pixnet.net/blog/post/119410657https://youyouyou.pixnet.net/blog/post/120080436


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


本章將介紹ESP32的藍芽通訊,藍芽與WiFi都是用來通訊,藍芽通常用於近端點對點通訊,WiFi則常用來連入網際網路,所謂的點對點就像是藍芽無線耳機與手機連接,用來播放音樂,或者藍芽滑鼠鍵盤功能是輸入文字,只是一種序列通訊,功能較為簡單,因此不需要像WiFi這樣太複雜的設定,不過藍芽雖然簡單,但是使用上方便,只要配對就可以取用服務,所以也非常流行。
與藍芽同位階的應該算是紅外線,不過紅外線有方向性,是要對準裝置才能傳輸,速度慢不說,距離大概不能超過10公尺,而藍芽則無方向性,因此不用對準,而且傳輸距離遠、速度也比紅外線快很多。
本書將會介紹如何使用ESP32藍芽與手機連線通訊,並透過手機的語音辨識遙控電風扇及檯燈,此外也會介紹最新的ibeacon室內定位裝置原理及實做。本章先簡介ESP32的藍牙通訊設定與使用,由於是藍芽內建的,所以不用接線或設定AT COMMAND,也不用宣告TXRX相關的通訊協定,而且ESP32內建的藍芽是採用低功率藍芽(BLE:Bluetooth Low Energy)耗電量較少,傳輸距離理論可達300公尺遠,實際測試30公尺沒問題,而常見搭配UNO使用的HC-05屬於藍芽2.1,理論傳輸距離只有10公尺,本章將介紹如何的啟動ESP32藍芽裝置,並搭配Android手機進行通訊,以下為本章的架構。

一、藍芽單向傳輸
二、藍芽雙向傳輸
三、藍芽指令與語音辨識

 

一、藍芽單向傳輸
本節說明使用ESP32藍芽將資訊傳遞給藍芽裝置(手機)進行接收,由於bluetooth函式庫iOS手機不相容的原因,後續章節都將使用Android裝置進行解說。
ESP32藍芽的開啟僅需幾個步驟:
1. 使用藍芽函式庫:#include <BluetoothSerial.h>
2. 宣告藍芽序列通訊物件:BluetoothSerial BT;//BT為藍芽通訊物件
3. 在Setup中開啟藍芽:BT.begin("BTName");// BTName為藍芽廣播名稱
4. 當要傳輸資訊時:BT.print("要傳輸的文字");//println則是換行
我們先來一個簡單的測試,就是每秒傳輸一次"Hello World!"到手機中,程式如下


#include <BluetoothSerial.h>
BluetoothSerial BT;//宣告藍芽物件,名稱為BT

void setup() {

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


更新中,可先參考本篇: https://youyouyou.pixnet.net/blog/post/120246022


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


繼前篇「MySQL資料庫存取」可以把溫濕度存放在自己的資料庫,這樣雖然非常好,可是考慮到不是每一個人都有辦法架設一台網路資料庫伺服器,所以我們來介紹一個目前物聯網最受歡迎的ThingSpeak資料庫,他是由大名鼎鼎的MATLAB公司所提供的免費空間,每一個註冊帳號可以免費取得4個頻道,頻道可以視為資料庫,每1個頻道可提供8個自訂欄位,最重要的是它提供非常直覺的圖表製作的功能,可以快速將資料轉換成圖表,且資料傳遞採用最簡單的http get,因此非常受到網友的推薦,算是網路入門的第一步。

除了儲存資料外,也有提供React及ThingHTTP,功能類似IFTTT可以進一步再串連其他服務,例如發現溫度過高就發送LINE通知,這都在本篇的文章中會介紹。

一、實驗目的

透過ESP32及DHT11取得環境溫濕度,將資料上傳至ThingSpeak並完成圖表設定,最後設定React,當溫度過高時,發送LINE通知給管理員,避免災害發生。

二、實驗過程

為了完成上述實驗,過程可分成以下幾個步驟,但有些屬於之前的課程就不再贅述,主要可分成以下幾個流程:
1.建立ThingSpeak帳號,並設定一個頻道
2.ESP32 透過DHT11取得溫濕度:
3.ESP32 WiFi連線及http get資料上傳:
4.圖表設定與頻道資料分享
5.設定LINE通知服務:
6.設定ThingSpeak React 及 ThingHTTP

三、實驗步驟

1.建立ThingSpeak帳號,並設定一個頻道

首先利用我們到ThingSpeak首頁: https://thingspeak.com/ ,ThingSpeak註冊過程比較特別,在建立帳號時並沒有密碼欄位,而是經過eMAIL確認後,才會要使用者輸入註冊欄位。這過程經常搞的大家摸不清頭緒,因此請大家依照以下流程進行註冊

1.1 註冊
進入ThingSpeak首頁後,點選右上角Sign Up功能,若您沒看到Sign Up,應該可能收到功能表內了。
image

文章標籤

夜市 小霸王 發表在 痞客邦 留言(6) 人氣()