超圖解物聯網IoT實作入門:使用JavaScript/Node.JS/Arduino/Raspberry Pi/ESP8266/Espruino

書名很長,以下簡稱《超圖解物聯網IoT實作入門》

封面的控制板和3C裝置圖案,刻意以黑白灰階方式呈現,傳達軟體的重要性,若沒有軟體驅動,這些高科技裝置宛如沒有靈魂的軀殼;背景採用和JavaScript標誌相同的黃色系。

《超圖解 Arduino 互動設計入門》序言中的「序」字,繪製成印刷電路板風格;本書強調的是裝置之間的連結,因此「序」字也做出對應的改變。

內容簡介

本書是《超圖解 Arduino 互動設計入門》的姊妹作,強調串聯網路軟體和微電腦控制板, 以 JavaScript 為主軸,開發網路應用程式、手機 App、互動網頁、資料庫程式和操控微電腦。書中包含網頁式遠端遙控 LED 燈、即時溫濕度 、保全自動感測拍照蒐證、網頁式遠端 LED 繪圖板、即時影像監控 、影像辨識擺頭控制攝影機雲台、雲端溫濕度監控、即時資訊動態圖表、藍牙機器人遙控手機 App 等多元範例(感謝本書編輯黃昕暐先生提供文案)。

本書特色

  • 統括物聯網應用開發的全面技術
  • 前端 JavaScript 到後端 Node.JS 實踐物聯網創意
  • 結合 Arduino、Raspberry Pi 實作物聯網感測控制節點
  • 詳述 C/P 值最高的 ESP8266 Wi-Fi 模組
  • 活用 Apache Cordova 開發跨平台物聯網行動 App
  • 使用 JavaScript 即可駕馭的 Espruino 嵌入式控制板
  • 採用 MongoDB 建構後端資料庫
  • 利用 D3.js / C3.js 打造資訊圖表
  • 連結 IFTTT 串連各項雲端服務

《超圖解物聯網 IoT 實作入門》目錄

各章節導讀,請參閱「新書預告:《超圖解物聯網IoT實作入門 使用JavaScript/Node.JS/Arduino/Raspberry Pi/ESP8266/Espruino》」這篇貼文。

第0章 無所不在的 JavaScript 與物聯網裝置

  • JavaScript 與物聯網
  • MPU、MCU與SoC介紹
  • 章節導讀

第1章 JavaScript 入門

  • JavaScript 入門
  • JavaScript 語言基礎
  • 函式定義
  • 定時產生隨機數字
  • Array(陣列)物件
  • 認識 Object(物件)類型
  • BOM(瀏覽器物件模型)與 DOM(文件物件模型
  • 動手做 操作網頁物件
  • 在網頁中嵌入 JavaScript
  • 事件處理程式

第2章 認識 jQuery 程式庫

  • jQuery 簡介
  • jQuery 語法基礎
  • AJAX 技術:動態更新 HTML 內容
  • 動手做 從 Arduino 輸出純文字溫度
  • 網頁訊息交換格式
  • Arduino 輸出 JSON 訊息
  • 調整燈光亮度的網頁介面
  • 動手做 接收調光值的 Arduino 網站程式
  • 動手做 製作滑桿介面網頁
  • AJAX 的安全限制

第3章 Node.js 入門

  • 在電腦以及樹莓派安裝 Node.js
  • Node 程式設計起步
  • 使用 http 模組建立網站伺服器程式
  • 事件驅動、非阻塞 I/O 示範:讀取檔案
  • global(全域)物件與模組檔案
  • 安裝與管理模組:使用 npm 工具程式
  • 使用 Express 框架開發網站應用程式
  • 使用 package.json 管理 Node 專案的模組程式
  • 動手做 從 Arduino 傳遞溫溼度值 給 Node 網站
  • 動手做 讓 Arduino 定時上傳 DHT11 資料
  • 使用 JSONP 格式跨網域存取資訊

第4章 Node.js 序列埠通訊與樹莓派 GPIO 控制

  • 安裝編譯 Node 模組所需的軟體
  • 動手做 Node.js 序列埠通訊
  • 動手做 從 Node.js 傳送序列資料
  • 透過 Node.js 執行系統指令
  • 樹莓派的 GPIO 簡介
  • 動手做 GPIO 輸出入訊號練習:按開關閃爍 LED
  • 動手做 透過紅外線感測模組拍攝照片
  • 樹莓派 GPIO 整合 Arduino 控制板
  • 5V 和 3.3V 電壓準位轉換

第5章 使用霹靂五號操控 Arduino

  • 霹靂五號:用 JavaScript 控制 Arduino
  • 動手做 用霹靂五號指揮 Arduino 閃爍 LED
  • 動手做 啟用上拉電阻並讀取開關訊號
  • 動手做 類比輸入與 PWM 輸出程式實驗
  • 動手做 檢測溫度
  • 動手做 控制伺服馬達
  • 動手做 控制 LED 矩陣顯示圖像
  • 使用 Socket.io 建立即時連線
  • 動手做 建立即時通訊程式
  • 動手做 瀏覽器與矩陣 LED 作畫

第6章 電子郵件、串流視訊、電腦視覺與操控伺服馬達

  • 透過 Node 傳送電子郵件
  • 動手做 雲端蒐證 / 拍照自動寄送 e-mail
  • 動手做 串流視訊 / 推播即時影像
  • 使用 MJPG 壓縮與串流視訊
  • 控制伺服馬達雲台
  • 動手做 使用方向鍵操控伺服馬達雲台
  • 動手做 攝影機雲台的 Node 伺服器程式碼
  • 使用觸控螢幕虛擬搖桿操控攝影機雲台
  • 瀏覽器連接遊戲控制器(電玩把手)
  • 動手做 使用 gamepad.js 程式庫建立遊戲器操作的網頁程式
  • 機器視覺(computer vision)應用
  • 使用 tracking.js 偵測人臉
  • 動手做 臉孔偵測與伺服馬達連動
  • 動手做 偵測顏色

第7章 Espruino 控制板簡介

  • Espruino 程式開發軟體
  • Espruino 的基本硬體操作指令
  • 動手做 使用光敏電阻製作小夜燈
  • 動手做 呼吸燈效果
  • 動手做 超音波控制燈光亮度
  • Espruino 的睡眠模式
  • 動手做 深層睡眠實驗
  • 動手做 藍牙控制 LED
  • 動手做 藍牙遙控車(馬達控制)
  • 動手做 利用 SD 記憶卡紀錄溫濕度變化
  • 動手做 控制伺服馬達
  • STM32 微控器相容板
  • 動手做 替 STM32 控制板燒錄 Espruino 韌體

第8章 使用 MongoDB 資料庫以及ejs 樣版引擎建立動態網頁

  • 資料庫簡介
  • 安裝 MongoDB
  • MongoDB 的基本操作
  • 查詢資料
  • 更新與刪除資料
  • 使用 mongoose 套件連結 MongoDB 資料庫
  • 連結 MongoDB 並讀取資料的程式
  • 動手做 儲存 Arduino 上傳的溫溼資料
  • 認識樣版引擎
  • 動手做 在 ejs 樣版中顯示最近 10 筆溫濕度資料
  • 動手做 分頁顯示資料

第9章 資料視覺化:使用 C3.js 與D3.js 繪製圖表

  • 使用 C3.js 繪製圖表
  • 顯示動態平移的即時線條圖
  • 動手做 使用資料庫數據描繪折線
  • 動態顯示 Arduino 檢測類比值
  • 動手做 使用圖表動態顯示感測器數據
  • 簡易數位濾波
  • 使用 D3 程式庫
  • 認識 SVG
  • 使用 D3 繪製 SVG 圖像
  • 使用動態資料繪製折線圖
  • 結合數據動態附加 HTML 元素

第10章 使用 Cordova 開發行動裝置 APP

  • 認識 Cordova
  • 設置 Cordova 的 Android 開發環境
  • 下載與設置 Android SDK
  • 安裝 Cordova 工具程式和 Ant
  • 使用 Cordova 建立手機 App
  • 啟用 Android 手機的 USB Debug 功能
  • Cordova 網頁的基本程式架構
  • jQuery Mobile 框架入門
  • 動手做 手機 App 網路控制 Arduino

第11章 製作藍牙手機遙控 App

  • 製作藍牙遙控 LED 燈 App
  • 動手做 Arduino 端的藍牙 LED 開關程式
  • 作藍牙機器昆蟲遙控 App
  • 動手做 手機體感(加速度感測器)控制伺服馬達
  • 動手做 透過手機 USB 介面連接 Arduino 板
  • 透過返回(Back)鍵關閉 App

第12章 ESP8266 物聯網應用入門(一)

  • ESP8266 模組簡介
  • NodeMCU 開發版簡介
  • 使用 AT 指令操作通用型 ESP 模組(ESP-01)
  • 動手做 透過 Arduino 執行 ESP8266 的 AT 命令
  • Wi-Fi 無線網路簡介
  • 動手做 透過 ESP-01 的 AT 命令建立 HTTP 伺服器
  • 使用 Arduino 開發 ESP8266 程式
  • 使用 ESP8266WiFi 程式庫連接無線網路
  • 使用 ESP8266WebServer 程式庫建立 HTTP 伺服器
  • 動手做 處理 GET 或 POST 請求
  • 讓 NodeMCU 扮演網路前端上傳資料(IFTTT)

第13章 ESP8266 物聯網實作(二)

  • 設置區域網路域名
  • 動手做 使用 ESP-01 模組開發 Arduino 物聯網
  • 透過 OTA 更新 ESP8266 的韌體
  • 使用 OLED 顯示器呈現 IP 位址和溫濕度值
  • 動手做 在 OLED 顯示 IP 位址與動態溫濕度
  • 使用 JavaScript 程式開發 ESP8266 程式
  • 使用 Espruino 的 Wifi 程式庫
  • 觸發執行 IFTTT 網路程式
Posts created 468

370 thoughts on “超圖解物聯網IoT實作入門:使用JavaScript/Node.JS/Arduino/Raspberry Pi/ESP8266/Espruino

  1. 補充少講的
    我使用的arduino IDE 是1.6.3
    加入library之後IDE 會出現
    WARNING: Spurious .github folder in ‘Adafruit NeoPixel’ library

    1. 請參閱12-20頁說明,至少採用1.6.4版的IDE,我目前使用的是1.6.13版。
      程式庫會伴隨ESP8266外掛下載,安裝路徑請參閱12-22頁說明。

      thanks,
      jeffrey

    2. 老師謝謝你
      換成1.6.13就可以了

      我有一個新問題是
      我是用arduino uno + esp8266
      來練習你的12.26的範例
      那我應該怎麼去接線呢?

  2. 老師我問錯了 抱歉
    我已經有先試過用12-16的AT 命令建立HTTP伺服器是成功的
    我是想問12-26範例你是使用NodeMCU來示範
    但如果我是想用arduino uno +esp8266 來實現要怎麼修改程式與接線
    謝謝老師

    1. 咦?你指的”arduino uno +esp8266″,不就是以Arduino Uno為主體(程式寫在Arduino Uno裡),ESP8266純粹當成Wi-Fi介面的意思嗎?

      thanks,
      jeffrey

    1. 你好,我已经和北京的电子工业出版社签约,简体版今年第一季会上市。

      thanks,
      jeffrey

  3. 老師我正在做你的6-18的MJPG 壓縮與串流視訊
    執行的時候出現
    MJPG Streamer Version.: 2.0
    i: fps………….: 5
    i: resolution……..: 640 x 480
    i: camera parameters…………..:
    Sharpness 0, Contrast 0, Brightness 50
    Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
    Exposure Mode ‘auto’, AWB Mode ‘auto’, Image Effect ‘none’
    Metering Mode ‘average’, Colour Effect Enabled No with U = 128, V = 128
    Rotation 0, hflip No, vflip No
    ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
    o: www-folder-path…: /usr/local/www/
    o: HTTP TCP port…..: 8080
    o: username:password.: disabled
    o: commands……….: enabled
    i: Starting Camera
    Encoder Buffer Size 81920
    連線到8080會出現
    404: Not Found!
    Could not open file

    請問哪邊有設定錯誤嗎?
    在樹莓派上使用

    1. 錯誤訊息:

      404: Not Found!
      Could not open file

      代表串流視訊伺服器無法在指定的路徑(/usr/local/www/)找到影像。請問你在執行6-22的mjpg-streamer指令時,影像輸出路徑正確嗎?

      thanks,
      jeffrey

    2. 我在安裝程式庫libjpeg8-dev 出現下方訊息
      pi@raspberrypi:~ $ sudo apt-get install libjpeg8-dev
      正在讀取套件清單… 完成
      正在重建相依關係
      正在讀取狀態資料… 完成
      Package libjpeg8-dev is not available, but is referred to by another package.
      This may mean that the package is missing, has been obsoleted, or
      is only available from another source
      However the following packages replace it:
      libjpeg9-dev libjpeg62-turbo-dev

      E: Package ‘libjpeg8-dev’ has no installation candidate

      所以我就改安裝 libjpeg62-turbo-dev
      這樣會有問題嗎?

    1. 老師不好意思一直煩你
      問題以解決
      只要把mjpg_streamer 裡面的www
      放到/usr/local
      裡面就可以成功了
      謝謝你

  4. 老師您好,我想要購買這一本書來學習,買書前我希望也一併購買套件來玩,是否可以完整介紹要買那一些硬體

  5. 老師您好:
    page2-26實作後, 點擊”temp_json.html”,
    濕度值與溫度值卻一樣, 如溫度20度, 濕度20%
    我把thCmd()函式裡的buffer陣列元素改成6個試試看:
    char buffer[6] = “”;
    還是一樣溫度和濕度值都一樣, 不知道如何處理?

    1. 從錯誤訊息 Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] 以及你的 Package name: GF.hello 看來,在解析描述Android App資訊的設定檔”AndroidManifest.xml”的過程出現錯誤。

      請把套件名稱(package name)全部改成小寫,再重新編譯。

      thanks,
      jeffrey

  6. 老師您好,我依照書上12-13頁的程式跑,卻出現以下錯誤:
    Arduino:1.6.5 (Windows 7), 板子:”Arduino/Genuino Uno”

    sketch_mar21a.ino: In function ‘void setup()’:
    sketch_mar21a:8: error: invalid conversion from ‘const char*’ to ‘long unsigned int’ [-fpermissive]
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
    from sketch_mar21a.ino:3:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:116:10: error: initializing argument 1 of ‘void HardwareSerial::begin(long unsigned int)’ [-fpermissive]
    void begin(unsigned long baud) { begin(baud, SERIAL_8N1); }
    ^
    invalid conversion from ‘const char*’ to ‘long unsigned int’ [-fpermissive]

    這份報告的詳情將會在
    “編譯時顯示詳細輸出資訊”
    在檔案 > 偏好設定裡啟用。

    請問是否有少做哪些步驟?

    1. 12-13頁的程式碼原始檔位於光碟的 “範例檔案\ch12\AT命令\AT_cmd_test” 路徑,剛剛測試編譯沒問題。請問你有引用SoftwareSerial.h程式庫嗎?

      thanks,
      jeffrey

    2. /Users/lucan/Documents/Christmastree_esp_test1/Christmastree_esp_test1.ino: In function ‘void setup()’:
      /Users/lucan/Documents/Christmastree_esp_test1/Christmastree_esp_test1.ino:9:33: warning: invalid conversion from ‘const char*’ to ‘long unsigned int’ [-fpermissive]
      Serial.begin(“Serial is ready”);

      老師 我也出現相似的問題 我上傳我跟著書中打的程式碼。(12-13) 也出現這類似問題。上傳成功但是紅字
      但 Arduino Example 裡面的兩個SoftwareSerial 卻沒有出現紅字。除了更新韌體外,有其他解決方式嗎?

    3. 12-13頁的程式跟ESP8266韌體沒有關聯。
      這個程式是在Arduino Uno上執行,
      其作用是搭建一個透過「序列埠監控視窗」和ESP8266溝通的橋樑。
      所以程式編譯出錯,問題是在SoftwareSerial程式庫或相關語法。

      如果你採用新的AT韌體,通訊速率要設定成115200,
      Arduino端請採用「燒錄與執行ESP8266 AT指令韌體/固件(一)」這篇貼文的程式碼。

      thanks,
      jeffrey

    4. 謝謝老師!我剛才也同時發現這問題了!
      我把書本的程式碼改成arduino範例的語法的時候就正常了。

  7. 老師您好,今天測試的時候竟然又成功了,
    但是從序列埠監控視窗at指令時出現:
    5852186Serial is ready!
    25325525225523725525523925563245249254

    請問是甚麼原因呢?謝謝

    1. ESP8266 AT命令的韌體有不同版本,基本上我不使用AT命令韌體,而是直接使用Arduino程式開發。12-13頁的內容採用的AT韌體版本是0.95.2版,請參閱這則回應下載韌體再測試看看。

      thanks,
      jeffrey

  8. 可是老師,當我使用燒錄器並用RealTerm測試AT命令韌體時,卻ok了,請問這樣esp8266韌體應該就不用更新了吧?
    謝謝!!

  9. 老師您好!不好意思一直打擾,
    之前我看了老師的”超圖解arduino互動設計入門”書後,
    有個新想法:做一個“當物體靠太近的話,可以透過手機app即時警告我”的硬體,
    目前規劃是使用uno版+多個超音波模組+esp8266-01,將接收超音波模組的資料持續透過wifi傳入手機,
    目前uno DIY成功了,超音波資料也可以從序列埠監控視窗看到,

    但是無線傳輸這塊,我上網查了資料,也看了老師的“超圖解物聯網IoT實作入門”,發現用arduino uno和esp8266配合,來進行內網的區域連線資料趨近於零…

    不曉得老師有沒有可以提供參考的資料呢?

    我現在對如何用Arduino無線傳輸資料(透過wifi)這件事非常沒有頭緒。。。

    麻煩老師了,真是不好意思,謝謝您。

    1. Arduino不單只是「開源硬體」更是「開放原始碼軟體」,它的程式語言被移植到不同的硬體平台。以ESP8266來說,主流的應用是直接用Arduino程式語言開發,許多常用的硬體模組和感測器的程式庫,都相容於ESP8266,所以你的需求其實用一慨ESP8266控制板(如:NodeMCU)也辦得到,不必再連接Uno控制板。

      thanks,
      jeffrey

  10. 老师您好,我想问一下这句代码是什么意思:dnsServer.start(DNS_PORT, “*”, myIP);

  11. 老師您好:
    我現在遇到寫入權限的問題

    目前我使用管理者權限的CMD.exe 將資料傳到Arduino Leonardo的COM上,但CMD上卻寫Access is denied
    要怎麼設定才能打開寫入Arduino 的寫入權限

    1. 拍謝,我不了解你的問題,你是說透過序列埠傳入資料給Arduino嗎?

      thanks,
      jeffrey

  12. 你好~我有買這本書,請問第2-4頁,我有下載 營運版 請問要放在電腦那裡的 js 資料夾呢? 謝謝~

    1. 網頁資料夾可以放在任何地方,但建議路徑和資料夾名稱不要夾帶中文,我通常放在磁碟根目錄,例如,d:\web

      thanks,
      jeffrey

  13. 嗨~你好,我有買 超圖解物聯網 IOT實作入門,2-34頁 Slider,然後我有看到這個網站http://kll.byethost7.com/myslider/,電腦網頁上操作正常,但我的手機Google卻無法顯示3個Slider 及 3個RGB數值,按右鍵 檢視網頁原始碼 後,我把檔頭上面的3個改成

    試了手機還是無顯示,請問老師有什麼地方沒有注意到? 請指導一下,謝謝哦~

    1. 剛剛試了你提供的網頁,Android手機的Chrome瀏覽器沒問題。你有測試過書本的範例嗎?

      thanks,
      jeffrey

    1. 除了HTML網頁,你還需要把需要的CSS和JavaScript程式放在指定的路徑,請參閱2-34頁說明。

      thanks,
      jeffrey

  14. 嗨~你好,之前我說的這個網站http://kll.byethost7.com/myslider/
    在電腦網頁上可滑動控制,但在手機上不能滑動控制,你的會嗎? 請問原因會是…
    請指導一下,謝謝哦~

    1. 因為那個jquery-ui版本是針對電腦、滑鼠介面開發,要在觸控螢幕上操作,請改用第10章介紹的jquery mobile,例如10-41頁的滑桿介面。

      thanks,
      jeffrey

  15. 嗨~你好,我有改成 jquerymobile,試了還是不能滑動,拜託請再幫我看一下,謝謝! (有寄到你的yahoo信箱了)

    1. ……

      從你之前發問的情況看來,應該是沒有寫過HTML或JavaScript。

      因為jquery和jquerymobile程式架構不一樣,並不是把引用程式庫的敘述換掉就好了。麻煩請先閱讀第一、二章和第十章,並且實際操作,有了基礎概念之後,再嘗試一些變化。

      thanks,
      jeffrey

  16. 您好
    我參考”超圖解物聯網IoT實作入門”用書本的範例程式 Ch13\Arduino\ESP01.INO
    成功的改成用一個繼電器控制頂樓電熱水器的開關控制,但是當經過大約一天的時間
    後我就無法連線至ESP01控制器了,經由我的測試ESP01仍然還在運作,但是與ESP01連線
    的無線分享器(Dlink DIR-612)會自動的斷掉與ESP01的連線,是否有什麼指令或無線分享器
    的設定可以讓ESP01與無線分享器保持連線?

    1. 有意思~沒有始終保持連線的指令,但是可以從「斷線後自動連線」方向著手試試看。

      類似這樣,每隔一陣子確認是否處於連線狀態:

      unsigned long previousMillis = 0; 
      const long interval = 1000*60*5;  // 間隔時間(ms)
      :
      
      void loop() {
          // 檢查是否過了間隔時間
          if (currentMillis - previousMillis >= interval) {
              previousMillis = currentMillis;
              // 如果WiFi的狀態不是「已連線」
              if (WiFi.status() != WL_CONNECTED) {
                  // 重新連線
              }
                  :
      }
      

      應該可行。

      thanks,
      jeffrey

    2. 您好
      感謝您的指導,我把你的建議加入我的code,但仍會有斷線的現象,不過更改為asus的無線分享器就不會有斷線的現象了,已經實驗2天已上仍然保持連線的狀態。

  17. 嗨~你好,請問一下 VB是用來設計桌面視窗應用程式,那 node.js 是離線式的javascript,是不是也可以設計像 VB的應用程式呢? 謝謝!

  18. 你好:
    關於13章中提到的OTA 網頁更新程式部份,功能很棒.
    讓我可以隨時透過網頁更新線上設備的程式碼.
    但如果有人知道我的設備IP位置
    就可能在有意或無意間破壞我的環控設備.
    是否可在OTA 線上更新時設定須提供密碼功能呢.

  19. 您好!

    在第10章(手機APP網路控制Arduino)的10-41中的CtrlPage中[壁燈]的開關ledSw的控制,
    1. 首先[壁燈]在[關]的狀態, 用手撥動手機App, 從[關] 到 [開]的狀態, 顯示在手機上
    2. 請是否可以設定timer (5 sec), 手機App自動恢復到[關]的狀態, 之後繼續讓使用者可以撥到[開]的狀態, 連續循環, 請問Cordova+JQuery Mobile要如何才可行? 感謝您. Albert

    1. 你可以在”ledSw”的”change”事件處理程式裡面,加入底下的敘述,讓它在5秒後自動回復成「關閉」狀態:

      if (val === '1') {
           setTimeout(function() {
           $("#ledSw").val('0');
           /*
              這裡加上AJAX敘述,傳送更新資料。
          */
          // 更新畫面
           $("#ledSw").slider("refresh");
          }, 5000);
      }
      

      補充說明,用程式更新jQuery UI的值(像上面的程式,切換開關狀態),元件的外觀並不會自動更新;每個jQuery UI元件都有個”refresh”參數,程式必須設定它,才能強置更新畫面。

      thanks,
      jeffrey

  20. Hi 您好,

    可以work. 這本書寫的不錯, 讓不懂的人很快就能上手.
    請問是否計畫寫advanced version. 感謝您.

    Albert

  21. Jeffrey 您好 !

    我使用express 建立HTTP Server, 用app.get(‘/connection’, function(req, res) { ….code… } ),
    在code中, 使用req.connection.remoteAddress or req.ip 可以get 遠端client 的 IP address,
    我要如何get遠端client 的port number 和 mac address 呢 ? 感謝!

    Albert

    1. 無法得知遠端的MAC位址,但是你可以透過request的connection物件,得知遠端的IP和Port,例如:

      ip = req.connection.remoteAddress;
      port = req.connection.remotePort;
      

      thanks,
      jeffrey

  22. Jeffrey 您好,

    請問您如何找到request 的connection物件, 有支援那些資料? 請教一下, 以後我要從哪裡找到相關資料參考.

    因為雲端伺服程式是用Express寫的HTTP server, 請問使用ESP8266 Wi-Fi 模組, 還需要1顆MCU, 透過UART
    跟ESP8266 Wi-Fi 模組溝通, 請問ESP8266 Wi-Fi 模組是否有支援 HTTPclient 嗎? 感謝!

    Albert

    1. 由於IP位址版本(v4或v6)、遠端和本機IP,以及埠號等訊息都是紀錄在socket物件裡面,而Node.js的物HTTP API說明文件的connection事件單元提到,socket可透過request.connection屬性存取。

      從Net API的這個單元,可找到讀取遠端IP和port的屬性名稱。

      至於ESP8266的HTTP Client的程式寫法,請參閱12-43頁的程式範例。

      thanks,
      jeffrey

  23. Hi Jefferey,

    您好!

    因為我要用Node.js開發 雲端伺服程式, 去要讀取NFC Card UID, 以控管那些卡能用, 那些卡不能
    用.

    1. 因為您網站上提到Mifare RFID-RC522模組, 請問您能提供 NFC Card Reader via USB/其他介
    面 & 提供SDK API on windows, 以配合Node.js 的開發伺服程式, 我能跟您購買此NFC Card
    Reader嗎?

    2. 假如您沒有, 是否請問可以建議我跟那一家購買

    感恩 !

    Albert

  24. Hi Jefferey,

    您好!

    請問用Cordova with JQuery Mobile for 手機App應用, 是否
    1) 能獲得所有Scan 到AP List, 然後抓到 SSID 和它事先設定的Password
    2) 能送出boardcast or multicast UDP 封包給 device 嗎 ?

    感謝!

    Albert

    1. 你可以在npmjs,com搜尋關鍵字,以第一個問題為例,輸入”cordova wifi”可以找到十幾個相關模組。 WifiWizard則是Google找到的模組,應該能滿足你的需求,第二個問題再麻煩你自行搜尋看看。

      thanks,
      jeffrey

  25. Hi Jefferey,

    您好!

    真不好意思又要麻煩您, 我用Node.js & Express 設計一個簡單的網站如下:
    1. 當app.get(“/”)時, 用res.sendFile送出首頁login.htm, 在login.htm只有input “username” & “password”,
    然後action=”/login”,輸入後到 第2.
    2. 當app.get(“/login”)時, 確定是合法使用者”username” & “password”, 就用res.sendFile送出主頁index.htm,
    在index.htm有link到修改密碼, 然後點選它.
    3. 當app.get(“/password”), 如何還能用第2. 得到的username (存在哪裡&如何取得)
    對MongoDB資料庫做更新密碼,如此才能讓多人同時修改密碼, 不會互相干擾

    感恩!

    Albert

    1. hi albert:

      如同本書序言提到的:「當今書市不乏大師級的JavaScript相關著作,像本書每個章節,從互動網頁、網站資料庫程式設計、動態圖表到手機App開發,都有專門的參考書籍,但它們都鮮少提及JavaScript在物聯網和微控制器的整合應用。所以本書的定位,並不是要取代這些書籍,而是延伸和擴充。」

      你的Node.js應用程式所需要的「登入」功能,涉及cookie, session和商業邏輯等議題,這些都跟IoT軟硬體整合沒有直接關係,但是我相信每一本Node.js書籍都有相關的應用範例和說明,再麻煩你參閱相關著作或者搜尋node.js session等關鍵字。

      thanks,
      jeffrey

  26. Hi Jefferey,

    謝謝您不厭其煩的指導, 目前可能使用 sessionstorage or localstorage.

    PS: 因為登入Node.js就記錄使用者, 使用者就註冊IoT device到資料庫, 如此Node.js就可Check IoT devic連上Node.js的合法性, 修改密碼只是其中一個功能, 不好意思沒說清楚.

    感恩!

    Albert

  27. 作者您好:
    本人購買您的著作’超圖解物聯網IOT’,在做實驗到’page2-16′(從Arduino輸出純文字溫度時),將光碟中範例檔diy2_1.ino編譯並傳送到Arduino上後:

    (1)在瀏覽器輸入192.168.1.25一開始都會正確出現訊息,
    (2)但是自動重新整理再次讀取dht11溫度值時(setInterval那段程式碼),瀏覽器都顯示無法讀取.

    當我用命令提示字元去ping網卡192.168.1.25時,連線延遲時間都小於1ms,
    但是當我按下網卡上的reset按鈕後,就會正確的在瀏覽器顯示1次溫度,但知後的自動或手動重新整理網頁都無法再次讀取溫度值了,請問老師該修改哪部份.

    ps.為了此次實驗我網卡也買了第2張去試了,也是一樣狀況

    1. 抱歉,我發現是字串沒有正確終結。
      請把dht11Cmd()函式裡的buffer陣列宣告:

      char buffer[5] = “”;

      改成:

      char buffer[6] = “”;

      再重新編譯上傳程式碼,謝謝!

      thanks,
      jeffrey

  28. 感謝作者:
    感謝您的認真回覆,程式己正常運作.

    再問個小問題,由您所述光碟中範例檔diy2_1.ino,除了:

    dht11Cmd()函式裡的buffer陣列宣告:

    char buffer[5] = “”; —–> char buffer[6] = “”;

    defaultCmd()函式裡的buffer陣列似乎也要將函式裡的buffer陣列宣告:

    char buffer[5] = “”; —–> char buffer[6] = “”;

    整個程式才能正常運行,本人Arduino不太在行,想跟您確認一下

    1. 沒錯,因為Arduino(C語言)的字串要有null字元結尾,以底下的溫度值為例:

      21.56

      加上null結尾,總共有6個字元。

      thanks,
      jeffrey

  29. 作者您好:
    我在做P.5-30(動手作-建立即時通訊程式),照書上所說建立一個資料夾,在裡面新增package.json檔,利用npm install成功安裝所有必要的套件,在資料夾下再新增www資料夾(裡面增加一個檔案index.html照著書p.5-33的程式),然後接下來,我用終端機node chat.js,然後打開瀏覽器輸入127.0.0.1:5438/chat,但是網頁跟終端機都沒反應,請問我接下來要怎麼做呢?

    1. 開啟瀏覽器,連接到127.0.0.1:5438網址,路徑不用加”chat”。

      thanks,
      jeffrey

  30. 嗨~請問第12章 讓 NodeMCU 扮演網路前端上傳資料(IFTTT),我註冊了,要開始用時到IFTTT 打 Maker,怎麼沒有出現,好像搜尋不到??

  31. 作著您好:
    感謝作者之前的解答.己經能做出來了.目前又遇到問題了,關於第6章(Page.6-3)的程式在光碟中ch6\emailer\mail_1.js,我己經改了gmail的使用者名稱和密碼,但執行程式後會出現下列錯誤訊息…

    Error: Invalid login: 534-5.7.14
    ……….
    Please log in via your web browser and
    then try again.
    ………
    (一直麻煩您,真不好意思)

    1. 請問你的寄信人填寫的是gmail帳號嗎?如果開啟gmail二次驗證,你有產生應用程式密碼嗎?
      我剛剛測試沒有二次驗證,以及開啟二次驗證,都沒有錯誤。

      thanks,
      jeffrey

  32. 作者您好:
    我用的這個帳號沒有二次驗證,請問有什麼Gmail的設定,需要設定的?

    且應用程式密碼那個畫面好像跟書本上面描述的路徑己經不一樣了,煩請作者能不能提供一下圖解,因為我自己找了一下子,可能我太忙沒仔細看,還是沒找到…

    以上問題麻煩您了,謝謝~

    1. 不好意思,简体版还在编排中。电子工业出版社把这本书拆分成两本:

      图解物联网IoT实作入门:使用JavaScript, Node.JS, Arduino, Raspberry Pi
      图解ESP8266物联网、Cordova (PhoneGap) 安卓蓝牙App與Espruino控制入门

      我只知道今年下半年会出版,确切时间就不清楚了,感谢关注!

      thanks,
      jeffrey

  33. 你好~請問在本書的13-13頁,OTA更新 我照著作成功了,有一問題請教,我改用手機打上網址 jarvis.local/update 但無法出現 上傳的頁面? 請問用手機可以作得到嗎? Thanks~

    1. 那個更新頁面就是一般的HTML網頁,跟手機沒有關係。如果手機連不上jarvis.local,請改用IP位址。

      thanks,
      jeffrey

  34. 請問 IP位址 是在
    void setup(void){
    打上 Serial.println(WiFi.localIP());
    然後在 串列埠監控視窗 來看是嗎?

  35. 嗨~你好:
    之前有玩過NODEMCU,請問如果我想要5個 NODEMCU 的GPIO都接上LED,然後用Mesh技術來作同時5個ON及5個OFF的控制,是有在Arduino裡看到 ESP8266 WiFi Mesh 這個技術範例,這樣可行嗎? 謝謝!

  36. 你好~請問這個 easyMesh 的使用方式,就是載入它提供的程式這樣嗎? 我手邊現有的是 nodemcu,請指示一下,謝謝!

    1. NodeMCU可用,但我沒測過那個程式庫,再麻煩你閱讀它的API說明文件。

      thanks,
      jeffrey

  37. 老師 關於cordova那一章
    能不能重置環境變數那些 然後直接裝android studio比較快 對我這種不懂java開發環境的人,實在不會排除一些問題,爬了很多stackoverflow的文章都有類似問題可是照做了還是有新的問題出現,好挫折啊
    之前不小心更新到cordova居然不能build 更新tools這個資料夾後又可以了,結果又不能run 就一直卡到現在了…

    1. 其實Java開發環境主要就是設定系統的路徑變數,只要你能在任何路徑執行javac -version就沒問題,而Cordova也只需要SDK,不必安裝IDE。當然直接安裝android studio也行,只是我的筆電(用了三年多的Surface Pro)的SSD硬碟容量只有128GB,所以沒想過安裝它。

      我本週會移除並重新安裝Java SDK, Android SDK, Ant和Cordova,看看能不能複製你的問題。

      thanks,
      jeffrey

  38. 简体中文版出来了,我是不是第一个买,作进是不要给个赞,嘿嘿,我早就预定好了。等了好久,哈哈。希望作者能用MQQT做几个小实例。对物联网这块,我一直在学习中。(没法贴图,我就不贴了。)大家可以去京东商城下单。

    1. 非常感谢!上周编辑提到要寄样书给我,估计我本周之内也会收到吧~

      thanks,
      jeffrey

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top