目前分類:ESP32(Arduino) (97)

瀏覽方式: 標題列表 簡短摘要

當我們使用ESP32時,可以像傳統Arduino UNO使用中斷語法

中斷(Interrupt)這個功能,類似我們以前寫C#時的Callback,也就是物件導向裡面的事件(Event)驅動,當特定事件發生時,我們再去處理這件事所對應的功能Function。

舉個例子來說,在還沒學習到中斷以前,我們的來客報知機(人體感測器+錄放音機)是利用Loop內的不斷偵測,delay時間還不能太長,避免沒偵測到,而沒有觸發歡迎詞,但是如果來客報知機還有其他用途時,例如偵測光敏,就必須也寫在loop內,這樣兩個功能就可能互相干擾,delay時間可能不同之類。

中斷的功能則是把「偵測」、「觸發」的部份合併在一起,並且可以拉出去Loop外,讓系統來幫我們做,不過偵測只能數位偵測(HIGH或LOW),另外中斷內不放置Delay,越簡單越好。

以下範例程式,可以讓ESP32依據腳位14發生變化時,改變腳位2的燈號,例如當人體感測器發生變化時,會點亮LED燈。能偵測的變化有四種類型

LOW:狀態成為LOW就觸發
HIGH:狀態成為HIGH就觸發
CHANGE:狀態改變就觸發,例如LOW->HIGH,或HIGH->LOW都算
RISING:狀態由LOW->HIGH就觸發,反之無效
FALLING:狀態由HIGH->LOW就觸發,反之無效

最後當要取消中斷時,可以用detachInterrupt(GPIOPin);來取消即可


int interruptPin = 14;  //中斷腳位
int ledPin=2; //LED腳位
int state = 0;   //預設LED狀態LOW
void setup() {
  pinMode(ledPin, OUTPUT);  
  pinMode(interruptPin, INPUT); //人體感測輸入
  attachInterrupt(digitalPinToInterrupt(interruptPin), isr_Callback, CHANGE);  
  //CHANGE:狀態改變就觸發
}

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

Arduino雖然屬於C語言,但是很多副程式沒有包進去,最近要我拆解CSV檔案,也就是逗號分隔檔,發現Arduino沒有原生的split功能,本來想自己寫,但是Google一下就有了,在此付上


//此副程式用來拆解','分隔的字串
String getValue(String data, char separator, int index){
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;
    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}


使用時

String a1=getValue("aa,bb,cc",',',0);

就可以抓到aa了


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

想知道ESP32如何進入睡眠嗎?
睡眠如何甦醒嗎?
睡眠有分多少層次嗎?
如何搭配電池讓時間持續最久嗎?
材料的可以購買本賣場「Lolin32深度睡眠研習套件」:https://shopee.tw/product/5742314/5422060939/
講義及範例程式網址:https://t.ly/3gen

課程主題:
1. Lolin32與電池管理
2. I2C OLED及Lolin32Lite
3. 睡眠種類
4. 喚醒方式
5. 輕度睡眠實做
6. 深度睡眠實做


一、ESP32睡眠種類

ESP32的工作模式一般可分成以下五種

image

Active正常模式:就是我們一般的運作狀態,可以開啟藍芽及WiFi
Modem-Sleep通訊關閉:就是指沒有啟動藍芽或WiFi的狀態,這個狀態並不是一個完整定義的工作模式,只是我們手動關閉通訊模組時的狀態,所以並沒有在ESP32的規格內

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

全台最快的MQTT上線了(<-廣告用詞),大家不用再跑澳門emqx,也不用打名子超長的eclipseprojects
享用小霸王實驗室所建立的台灣最快最穩(<-廣告用詞)由HiveMQ所架設的MQTT Broker,完全免費~以後也不會收費
直接在MQTT Broker輸入
位址:mqttgo.io
port:1883
不須帳號密碼,Topic自己取,也可以用中文Topic喔。
Websocket也即將開通喔~

本筆記將說明如何在ubuntu安裝HiveMQ CE,可以分成以下五個步驟

一、安裝HiveMQ CE

二、安裝相關Plug-in

三、安裝Prometheus監測軟體

四、安裝Grafana數據化面板

五、設定所有服務為開機自動執行


一、安裝HiveMQ CE

1. Update系統:
sudo apt-get update
sudo apt-get upgrade -y

2. 建議安裝Chromium(此為個人習慣,與本安裝無關):
sudo apt-get install chromium-browser

3. 安裝Java環境:

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

全台最快的MQTT網站上線了
大家不用再跑澳門emqx,也不用打名子超長的eclipseprojects
小霸王實驗室出品的mqttgo.io開放測試,有鑑於我自己經常在使用的eclipseprojects的MQTT伺服器經常無法連線,名子又臭臭長,教學上無法順利完成,就萌生自己建立MQTT伺服器的想法,經由文舟大哥的幫忙後,終於建立好自己的MQTT伺服器了,使用hive MQTT CE。
之前設定eclipseprojects,名字太長學生經常打錯,所以這次申請最簡化的名稱:MQTTGO.io,是不是很好記呢~
設定方式如下:
broker:mqttgo.io
port:1883
不須帳號密碼,不須事先申請,主題名稱請隨意,也可以用中文

完全免費~以後也不會收費,感謝大家愛用,MQTTGO.io第一天線上人數就能衝到50以上~請大家幫忙壓力測試一下,剛剛測試ESP32CAM用MQTTGO.io傳照片,竟然能達到1-2秒一張。如下面的影片。


下週應該就會有WEB測試界面了,以後就不用安裝爛爛的MQTTLens,直接連上我的網站就能測試了。

MQTTGO.io Web測試開通了喔

網址:http://MQTTGO.io

image


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

在ESP32的家族裡,最便宜的應該舊屬這款Lolin 32 Lite,不過便宜雖便宜,不僅該有的都有,還外加了電源管理,可以讓你無痛直接使用電池,當USB供電時可以提供電力之外,還可以幫忙電池充電,當USB移除時,就可以使用電池供電。

ESP32 WeMos LOLIN32 Lite high resolution pinout and specs – Renzo Mischianti

這批32Lite品質比以往更優良,當電池完成充電後,電池充電燈會熄滅,以往的批號就算充飽電,燈一樣會一直亮著,導致我們分不清楚電池電量狀況。

image

關於這顆1200mAh的鋰聚電池的電量如何?目前我用OLED進行測試,充飽電後讓OLED長時間開著,結果使用時間介於36hr~48hr之間。

未提供相片說明。

這裡產生一個問題,仔細看Lolin32Lite沒有傳統的I2C腳位21及22,所以如果使用I2C就必須自定義,我們使用SDA=19,SCL=23腳位來啟動I2C OLED螢幕

以下程式須安裝Adafruit_GFX及Adafruit SSD1306兩個程式庫,並直接開啟範例程式

image

第一個要修改的是第35行的位址,由原來的0x3D改成0x3C

image

第二個則是在setup內,設定I2C的,使用wire(SDA,SCL),我們使用19及23腳

image

 


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>//請安裝Adafruit_GFX
#include <Adafruit_SSD1306.h>//請安裝Adafruit SSD1306

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

文章標籤

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

這次我們使用Max30102血氧感測器來偵測血氧數值,而開發工具我們使用的是Blocklyduino裡的吉哥積木,讓我們在家也可以自己測量數值,了解身體狀況喔。


課程重點說明:
要實習本次內容,請準備以下材料喔
 1. ESP32及MicroUSB線
 2. Max30102血氧偵測
 3. 0.96 OLED顯示器
 4. 無源蜂鳴器
 5. 公公杜邦線x10 及 麵包版

血氧擴充版賣場,選擇血氧套件(售完為止):https://t.ly/xyTG
Blocklyduino請參考吉哥積木說明:https://t.ly/ucUe
血氧感測的原理請參考說明:https://t.ly/ZRA8
請關注小霸王粉絲專頁以獲得最新訊息:https://www.facebook.com/ImNightMarketKing
#Arduino  #ESP32


文章標籤

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

ESP32各腳位PULLUP設定實驗結果(資料來源:葉子宏,原始網址:https://www.facebook.com/groups/esp32tw/permalink/3163691910536022/)

以下為38隻腳NodeMCU-32S我測試過的心得
GPIO35、34、39、36 只能設置為輸入模式,上下拉無軟件且要接電阻
上拉INPUT_PULLUP函數(電阻接正)(開關接負)和
下拉INPUT_PULLDOWN函數(電阻接負)(開關接正)
GPIO13、12、14、27、26、25、33、32、15、4、16、17、5、18、19、21、22、23
設置為輸入模式下拉INPUT_PULLDOWN函數(電阻接負)(開關接正)digitalRead→ LOW
GPIO13、12、14、27、26、25、33、32、15、0、4、16、17、5、18、19、21、22、23
設置為輸入模式上拉INPUT_PULLUP函數(電阻接正)(開關接負)digitalRead→ HIGH
GPIO13、12、14、27、26、25、33、32、15、2(led會亮)、4、16、17、5、18、19、21、22、23
設置為輸出模式
 


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

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


ESP32的藍芽2.0也就是BluetoothSerial真的是很方便,不過有一個小問題就是有時候距離太遠可能會連線中斷,如果斷線以後沒有任何提醒給使用者,那麼後續的工作就沒辦法進行了。

以下小程式可以建立一個callback事件,當裝置連線成功或連線中斷時,都會送出一個序列視窗的提醒(當然也可以改寫成LED燈號),給大家參考。


#include <BluetoothSerial.h>
BluetoothSerial BT; //藍芽callback事件
void callback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
  //藍芽連線完成
  if (event == ESP_SPP_SRV_OPEN_EVT) Serial.println("藍芽連線完成");
  //藍芽連線中斷
  if (event == ESP_SPP_CLOSE_EVT ) Serial.println("藍芽連線中斷");
}

void setup() {
  Serial.begin(115200);
  //建立callback事件
  BT.register_callback(callback);
  BT.begin("ESP32");
}

void loop() {
  //do what you want

文章標籤

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

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


ESP32CAM是以ESP32為主版具鏡頭功能的Arduino,對於玩Arduino也想玩影像處理的夥伴的確非常吸引人,套一句網路梗就是「我全都要」

我全都要

不過ESP32CAM少了USB的確很麻煩(請參考:https://youyouyou.pixnet.net/blog/post/119383183),後來有一款內建CH340 USB接口的ESP32CAM,上傳就簡單多了,但是又出現一個問題,就是這款USB接口非常脆弱,經常不小心就脫落了。

本公司目前已經有研發新款的ESP32CAM,各位可以期待一下喔。

上傳底板則是專門針對ESP32CAM的USB上傳接口,使用CH340晶片,接上ESP32CAM就可以利用USB上傳程式碼,省去接TTL線的困擾。

關於上傳底板的教學請參考影片說明

一、使用USB上傳底板步驟

1. 連接ESP32CAM及上傳底板

2. 安裝CH340驅動程式

3. 開啟Arduino IDE並開啟ESP32CAM的範例程式CameraWebServer

4. 修改相關參數
   - 修改WiFi上網設定
   - 將Model改為AIthinker

--------以上步驟請參考:https://youyouyou.pixnet.net/blog/post/119383183----------------

5. 將ESP32CAM調整成下載模式
   - 按底板的IO0+ESP32CAM的RST,這裡很奇怪,因為這個上傳底板的RST並無實際作用,因此要改用ESP32CAM內建的RST按鈕。
image

文章標籤

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

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


記得曾經在某篇文章中看到,大意是辨別菜鳥程式設計師的幾個特徵,如果你的新同事符合這些特性的話,要儘快遠離他,避免跟他同一個團隊,而該文所羅列的特徵中其中有一個是使用「白底界面」的開發工具,這個戳中我的笑點,其實沒這麼嚴重(不過該篇本來就是搞效用的),因為資深的程式設計師大多會把程式界面轉黑色、文字為白色,這樣長時間工作下會比較不傷眼睛,不過這也沒這麼誇張,我就常遇到用白底的工程師,叫她換她還不爽,說看白的習慣。

不過事實上來說,主要是寫程式抓Bug時間長,尤其很人都是半夜工作,白色太亮確實傷眼睛,所以開發工具大都是推薦黑色主題,筆者常用的VSCode甚至安裝好就採用黑色主題,想到這裡我就發現有一個開發工具竟然不是黑色的,就是ArduinoIDE,太糟糕了,難怪很多大師都故意遠離我,原來是看到我的Arduino IDE是白色主題才會這樣(攤手)。

image

好吧,那麼我們來把Arduino IDE轉成黑色主題吧。

1. 下載Arduino 黑色主題

原來早就有人弄好黑色Arduino的主題檔,下載網址:https://github.com/jeffThompson/DarkArduinoTheme

點選右上角的Code/DownloadZIP。(對了,我的Chrome網頁也是黑色背景)

image

先暫時解壓縮放到桌面上,解開後的內容如下(對了,我的檔案總管也是黑色背景)

image

2. 將檔案覆蓋theme資料夾

首先將上述的theme資料夾解壓縮覆蓋自己電腦的Arduino\lib底下,一般是在C:\Program Files (x86)\Arduino\lib,不過你如果安裝在別的地方,就請自己找看看了。

image

找到後,將上述的theme直接覆蓋到arduino/lib底下的theme資料夾

image

對了,如果你未來要需要還原成白色背景的話,建議你先把theme備份到其他地方,未來要還原成白色時,只須再覆蓋回來即可。

3. 重開開啟Arduino啟動黑色主題

上述步驟都完成後,將Arduino重開,即可獲得防禦+9的黑色斗篷,啊不是,是黑色主題的Arduino,馬上變身為資深程式設計師,是不是很棒呢。

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

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


ESP32內建WiFi及藍芽,藍芽部份支援2.0的BTSerial及4.0的BLE,關於2.0 BTSerial連線的範例可以參考:https://youyouyou.pixnet.net/blog/post/120275962
而4.0 BLE部份功能則更多,可以拿來做Beacon定位偵測(https://youyouyou.pixnet.net/blog/post/119410657),或者BLE Notify(https://youyouyou.pixnet.net/blog/post/120916475),今天則是再增加一個功能,就是模擬成藍芽鍵盤。

一、BLE藍芽鍵盤
ESP32與傳統Arduino比較起來雖然大部分都比較強,但是有一個小小的缺憾,就是不能模擬成USB鍵盤,不過還好可以透過BLE模擬成藍芽鍵盤,使用的程式庫則是ESP32-BLE-Keyboard(網址:https://github.com/T-vK/ESP32-BLE-Keyboard),此程式庫尚未被Ardunio IDE收錄,因此請自行下載匯入安裝。除了鍵盤以外,也可以模擬滑鼠及遊戲遙控器,可以參考作者的說明。
根據作者的說明,模擬鍵盤的方式就是送出BLE指令,例如要打「A」,就是送出藍芽指令,其方式為bleKeyboard.print(“A”),除了print之外,也有write、press等指令,差異列表如下

image

關於所有鍵盤的特殊功能鍵用法,可以參考「BleKeyboard.h」(https://github.com/T-vK/ESP32-BLE-Keyboard/blob/master/BleKeyboard.h)裡面有完整的列表。

二、實做迷片救星,老婆通知器

本次我們就假設你正在觀看「日本首都很熱」,或者「澳門賭場」等類型的愛情動作片時,很怕有人發現,那麼就做一個人體感測器在門口,當有人經過時,就讓ESP32送出「暫停影片播放」、「清空桌面」、「開啟瀏覽器搜尋"ESP32"」等三個動作,假裝我們正在認真找資料,是不是很棒呢?要完成這三個藍芽鍵盤指令,其語法分別為
1.「暫停影片播放」
bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE)

2.「清空桌面視窗」:
bleKeyboard.press(KEY_LEFT_GUI);//windows左側按鈕
bleKeyboard.print(“d”);//輸入d,即windows+d=清空桌面
bleKeyboard.releaseAll();//釋放windows按鈕

3.「開啟瀏覽器搜尋”ESP32”」:

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

稍後更新


文章標籤

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

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


ESP32 OTA的第二種模式是OTAWebUpload,一樣是ArduinoIDE內的範例,方式是將ESP32變成一台Webserver,透過ESP32的網頁上傳ArduinoIDE編譯過得bin(binary)檔,這方式雖然貌似較BasicOTA把功能直接做在ArduinoIDE上麻煩,但是較為穩定,根據之前的經驗在ArduinoIDE上的WiFi虛擬Port不一定能正常使用,而走Http模式的Web為TCP/IP模式,相對非常穩定,兩者相比,如果需要穩定性高的還是採用OTAWebUpload吧。


1. 第一次燒錄OTAWebUpload程式碼

OTAWebUpload一樣是ArduinoIDE內建的範例,在檔案/範例/ArduinOTA/OTAWebUpload可以找到

image

開啟之後,首先要修改的是最前面第8-9行的WiFi SSID及密碼,至於host則改不改無所謂(mDNS用)。

image

程式上傳完成後,就可以看到取得的IP

image

用瀏覽器開啟上面這個IP就可以看到ESP32所模擬的網站登入畫面

image

由於這個是用來更新程式碼的,所以當然要有帳密了,不然隨便有人跑來登入,隨便上傳程式碼,你的ESP32就被綁架了,哈哈,至於帳密是多少?很愚蠢的,帳密已經寫在html原始檔,都是admin。

image

要修改這個帳密也很簡單,Arduino原始檔中的第17-97行都是網頁的原始檔,帳密可以在第47行看到,不過改這個實際上沒什麼意思,因為只要會檢視原始檔的都知道怎麼找帳密。

image

完成帳號密碼登入ESP32網站後,就可以準備上傳編譯的bin檔。

image


2. 上傳bin檔

接下來我們要準備下一個要上傳到EPS32上的程式bin檔,bin就是將原始碼編譯後的binary二進位檔,由於我們使用Arduino時編譯上傳的過程我們是不太關心的,所以可能大部分的使用者都不知道原始檔有經過編譯成bin。

文章標籤

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

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


今天來介紹ESP32 OTA遠端更新

OTA為OverTheAir的縮寫,意思就是空中更新程式碼,個人認為這個IoT產業非常重要的一環,畢竟當你的裝置從實驗室走到實際場域後,一定會遇到很多問題,如果場域分散在很多不同的地方,光程式改版就會讓你疲於奔波,帶著USB線到處更新你的ESP32,想想就很累,如果今天你的裝置支援OTA,那你在家裡就可以直接更新客戶端裝置的程式,是不是很方便。

OTA並非是ESP32的專屬功能,很多Arduino系列也都支援,以目前筆者所觀察到的OTA目前來說主要分成以下四種模式

1. Basic OTA:在Arduino IDE中形成一個虛擬的Port,選擇該Port即可上傳新的程式碼

2. OTAWebUpload:ESP32會變成一台Webserver,透過ESP32的網頁上傳ArduinoIDE編譯過得bin(binary)檔

3. HTTP Update:將編譯好的bin檔放在一個公開的網站上,讓ESP32主動下載

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

除了4之外,目前我都實做過,本篇先從最簡單的1. Basic OTA開始吧。


Basic OTA是內建的功能,只要檔案/範例ArduinoOTA/BasicOTA就可以找到,範例程式這裡就不列出。

image

上傳時選擇Partition Scheme為Default 4MB wiht spiffs(1.2MM APP/1.5M SPIFFS)

image

修改好程式最上面的WiFi設定後,上傳即可

image

BasicOTA由於筆者很少用,程式內容我就不一一說明

程式上傳後,如果網路有連上,理論上就可以在ArduinoIDE中找到裝置

image

找到的畫面會向下面這樣,在原本序列埠下方會出現一個ESP32虛擬的Port,後方則為ESP32的IP。

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

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


NodeMCU-32s(也就是安信可的esp32)有一個「小」問題,就是腳位寫在背面,插在麵包版上以後腳位就看不到了,後續使用就要參考腳位,至少以往Arduino UNO腳位是寫在正面,這樣比較起來,教學上有點不便。

為了解決這樣的問題,我製作了腳位貼紙V.1版,目前提供免費試用,於本賣場購買ESP32都會贈送一組。

賣場:https://www.ruten.com.tw/item/show?21848118800764

使用方式有兩種,貼在ESP32上或者貼在麵包版上,請參閱以下影片:

1.貼在ESP32腳位上

image

2.貼在麵包版上

image

目前改進方向

1.材質改不容易破損的塑膠
2.預先裁切刀模
3.字的大小及顏色

 


文章標籤

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

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


經常有夥伴跟我反應ESP32的網路連不上的問題,經常就是序列視窗一直出現無限的

........................................................................................................................

會印出上面這些點就是代表ESP32還在尋找網路,所以你應該檢查的是"網路環境"及"SSID名稱密碼",而不是程式碼。

image

發生這樣的問題可以分成以下幾種可能:

1.SSID或Password打錯:SSID、Password都有分大小寫,名字越簡單約好,不要用中文、空白及其他特殊符號,尤其是IOS手機,分享熱點的名稱就是手機名稱,所以請依照一下方式修改
   -進入設定/一般/關於本機/名稱
   -修改手機顯示的名稱

iphone 熱點名稱


2.網路訊號太差:手機、筆電能連得到,不代表esp32也可以,畢竟版載天線功率有限,如果真的沒辦法請使用外接天線(需修改0R電阻)

3.WiFi AP是5G頻段:越來越多的WiFi支援5G頻段,但是ESP32只有2.4G,如果AP是5G WiFi,那連到天荒地老也不會成功,而且目前很多手機或電腦分享WIFI時會預設開啟5G網路,例如IOS手機可以開啟"最大化相容性",否則ESP32無法連線,Android手機也有這個選項

iphone-maximize-compatiblity-5ghz-wifi-2.jpg image
IOS手機開啟最大化相容性(2.4G WiFi) Android手機開啟擴充相容性(2.4G WiFi)

4. 不可使用連線後才登入的網路:有些網路連線SSID時不用密碼,但是連線後有一個登入畫面,要輸入使用者名稱或密碼才能用網路,這種網路物聯網裝置也無法使用,因為他沒辦法在連線後輸入帳號密碼,例如像是學術網路TANet,要輸入Mail及密碼這種,ESP32就無法連線了。
 
image


5. 有時候就是ESP32要RST才能連上
上面的問題中最惱人的就是第4,長期的經驗發現ESP32在特定狀況就是要連不上時按一下RST重開,然後...她就連上了,問題是什麼我並不清楚,不過解決方案倒是滿簡單的,就是加入嘗試一段時間後依然連不上網路時,就下ESP.restart()重開機即可。

例如以下的語法

文章標籤

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

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


如前一篇所說(NBIoT是什麼?),NBIoT可以大幅降低企業佈署設備的WiFi需求,也可避免因為場域WiFi不穩定所造成的問題,那麼NBIoT要如何實做?

本文將會以NBIoT傳輸MQTT,並以電腦的MQTTLens進行接收為例,說明整個傳輸接收流程。

首先我們必須準備NBIoT的模組,以筆者所開發的ESP32開發整合版就有留NBIoT接口,我們的NBIoT使用的晶片是基於聯發科(MTK-2526)的BC26模組,雖然他是USB外型,但並非USB傳輸格式,只是我們帥氣的黃董認為做成USB外型比較堅固耐用,並且可以後續進行串接。

NBIOT

關於上面的擴充版,詳細規格資料可以參考附件:https://t.ly/waON,使用範例可以參考以下四篇文章

說明一 燈號:https://youyouyou.pixnet.net/blog/post/120417760

說明二 USB Power:https://youyouyou.pixnet.net/blog/post/120418861

說明三 I2C LCD:https://youyouyou.pixnet.net/blog/post/121069748

說明四 SPI TF卡:https://youyouyou.pixnet.net/blog/post/119643441


一、NBIoT基礎設定:

目前NBIoT大多採用ATCommand通訊,若讀者已經取得上面的擴充版及任何的NBIoT SIM卡,那就可以開始下面的流程。

1. 在ESP32上安裝ATCommand溝通程式:https://t.ly/4XWR,此程式會將ESP32的序列通訊輸入轉至NBIoT(Serial2 RX:16、TX:17)中,這樣我們就可以手動來下達AT命令

2. ATI:ATI是查詢系統版本,不過我們會用來測試BC26是否正常,輸入ATI後,會得到BC26的回覆如下圖。若無回應,那就必須檢查模組是否有插好。另外就是ESP32 1.0.6的版本也會造成無法回應,因此先選擇1.0.4。

image

3. AT+QCCID :此指令用於檢查SIM卡狀態,一般來說,會列出該SIM卡的卡號,如下圖,若SIM卡未安裝,則會顯示ERROR

image

4.AT+QCGDEFCONT?:詢問APN設定方式,由於不同系統商會有不同的APN(APN, Access Point Name)設定,例如下圖就是以中華電信或遠傳電信為例,兩者都採用"IPV4V6","internet.iot"為APN,當我們利用這個指令查詢時,就會得到這個結果,下一步就是利用這個指令來設定這張NBIoT模組的APN。要注意的是這裡的「?」一定要使用半形「?」不可使用全形「?」。

image

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

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


NBIoT是什麼?似乎最近常常聽到,不知道是作什麼用的?要怎麼用?今天就一起來說明

NBIoT(Narrowband Internet of Things)就是一種傳輸模式,一般來說物聯網裝置要上網,主要是以WiFi為主,除此之外也有Lora、Zigbee、BLE等等,不過還是以WiFi為主,不過如果你的應用場域沒有WiFi該怎麼辦?例如在智慧農業的設備在田裡,WiFi太遠連不上,Lora又覺得傳輸不穩定的話,就可以考慮NBIoT這個方案,那麼為什麼NBIoT可以在WiFi收不到的地方傳輸資料呢?其實就是利用電信的基地台,像是中華電信、遠傳、台哥大、台灣之星等等的都有提供類似的服務,只要向這些電信服務商申請就可以使用這些公司的基地台來傳輸資料,不過這樣的話,與目前的4G、5G服務有什麼差別呢?

一、NBIoT服務

一般人使用4G網路通常是看影片照片、或者玩遊戲這種多媒體娛樂,所以傳輸的資料量很大,網路上一張照片可能都要3M,而物聯網裝置傳輸的資料有著很大的不同,例如說溫度濕度、而這些大部分就是純文字資料,純文字資料傳輸當然不能沿用多媒體的傳輸方式,因此在基本封包的組成、頻寬等等都有所不同,不過對於一般使用者來說最大的影響就是NBIoT的傳輸頻寬吧,以下筆者就以中華電信的規格來說明

image

如上圖可以看到中華電信在物聯網上的布局除了NBIoT之外,還有Cat-M1、LTE Cat-1、LTE Advenced等,這些最大的不同就是網路速度了,不同的網路速度可以搭配不同的服務,例如NBIoT大約是50kps ,比較合適電錶、建築、停車等等這類不會移動的物聯網裝置,如果是要放在人身上的,就要提高到LTE-M、若是要放在車上的則需要使用到LTE Advenced,當然這些的價格都不太一樣,以遠傳電信來說,NBIoT的價格是5M/10元月租費,也許很多人會覺得5M?是可以傳什麼啊?不過如果你的資料都是文字資料,5M卻是非常大的,例如你每次傳輸只是溫濕度,那也只有幾個bytes ,若一次傳輸10bytes來算,5M(5242880bytes)粗估可以傳輸524288次,如果一分鐘一次,可以傳一整年喔(524288/60/24=364天)。

Image5.jpg

不過NBIoT的申請是有限制的,目前各大電信商都限制必須由法人來申請,也就是說NBIoT針對的是企業用戶,個人用戶則無法申請,筆者認為主要是要做市場區隔吧,畢竟這麼便宜的費用,可能有些使用者就會停用高費率的4G網路來使用NBIoT網路吧。

另一方面,遠傳則有提供30M/100元預付卡方案,使用效期為三年,也可以再額外儲值提高使用效期,筆者目前都是使用這個方案,相同的這個方案也必須要企業來申請才行。

這裡說一下使用NBIoT的優點,除了費率便宜之外,最大的優點就是不再需要設定WiFi,一般來說,如果你的裝置佈署在場域,那一定要將裝置設定為場域的WiFi,如果場域的WiFi故障、或者人為的移動、改名等等的問題,都會導致裝置無法連線,而NBIoT則無此問題,NBIoT是使用電信基地台,不會有WiFi需要重新設定的問題,因此設備佈署時就與場域無關,只要開機就開始使用。

二、NBIoT連網步驟

目前NBIoT的晶片主要有SIM7000、BC26等,這些晶片的操作都是透過ATCommand來做,只要熟悉這些指令,就可以讓你的Arduino、RPI連上網路,以下面筆者的教學講義來說,主要分成兩大流程:1.設定流程、2.傳輸流程。

1.設定流程:主要檢查設備及設定模組的SIM上網參數

    -1. ATI:檢查硬體設備版本編號

    -2. AT+QCCID:檢查SIM卡編號

    -3. AT+QCGDEFCONT?:詢問APN上網參數

    -4. AT+QCGDEFCONT="參數":設定APN上網參數,一般目前都以"IPV4V6","internet.iot"為APN

    -5. AT+CESQ:詢問上網訊號強度,一般都在63~1之間,數字越高代表訊號越好,10以下就很難連上,而99則是無法偵測

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

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


ESP32CAM可以透過MQTT達到直播的功能,將影像推播到手機上,Android手機可以利用Mqtt dash來接收影像,就可以在世界上任何地方看到ESP32CAM的影像了

本部份請參閱:ESP32CAM MQTT直播

不過有些iOS使用者就沒有合適的APP可以用,就連PC上也沒有合適的MQTT Client可以用,那就自己寫一個吧~

本程式採用Python語法,請先自行pip安裝Opencv及paho-mqtt程式庫,程式執行前,請修改MQTT Broker及SubTopic1等參數


#請先安裝1.paho-mqtt、2.opencv
import paho.mqtt.client as mqtt
import cv2
MqttBroker="mqtt.eclipseprojects.io"
MqttPort=1883
SubTopic1="youjunjer1030/storage308/pic"
 
#設定連線成功時的Callback
def on_connect(client, userdata, flags, rc):
    print("連線結果:" + str(rc))
    #訂閱主題
    client.subscribe(SubTopic1)
    
#設定訂閱更新時的Callback
def on_message(client, userdata, msg):
    f = open('receive.jpg','wb+') #開啟檔案
    f.write(msg.payload)#寫入檔案
    f.close()#關閉檔案
    #顯示影像檔
    img=cv2.imread('receive.jpg')
    #img=cv2.resize(img,(640,480))
    cv2.imshow('image', img)
    key=cv2.waitKey(1)
    # 按q離開
    if key & 0xFF == ord('q'):
        exit()
    print('image received')
 
#設定Mqtt連線    
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MqttBroker, MqttPort, 60)
#等候訂閱
client.loop_forever()

不過目前有一個小缺點,就是使用Opencv的imshow會有點卡卡的,以後再來找其他顯示圖片的方法。

image


文章標籤

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

1 2345