01TUNIOT入門課程

(2017/02/01 大年初五)

題目一:點亮NodeMCU ESP8266旁的LED燈(integrated LED)

題目二:點亮接在NodeMCU上的三色LED燈

題目三:讀取光敏電阻的值,並顯示在序列埠監控視窗

題目四:按鍵的使用

題目五:LCD顯示器的使用

題目六:紅外線動作感測器(PIR Motion Sensor) 或稱人體紅外線感測器的使用

題目七:超音波測距模組的使用

題目八:伺服馬達的使用

題目九:OLED的使用

題目一:點亮NodeMCU ESP8266旁的LED燈(integrated LED)

  • 利用拖曳的方法,完成如下的程式(檔案於附件)(integrated LED在HIGH的時侯是暗燈、在LOW的時侯是亮燈)

    • 開啟此一Arduino檔案,會出現此一提示視窗

    • 利用Arduino IDE軟體,開啟此程式,並選擇正確的板子(NodeMCU) 及序列埠

    • 註:教學影片中板子的Upload Speed選921600

  • 上傳(燒錄)程式

    • NodeMCU的integrated LED一閃一閃

        • 除了integrated LED可用外,下方還有一顆D2的LED燈可用

    • integrated LED = D4 = GPIO2,且integrated LED 與 D4 亮燈相反,當D4=1時integrated LED不亮,當D4=0時integrated LED亮

    • (integrated LED在HIGH的時侯是暗燈、在LOW的時侯是亮燈)

題目二:點亮接在NodeMCU上的三色LED燈

  • 三色LED燈的三腳分別接於 D0、D1、D2 ,負極接於GND,如下圖:

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

題目三:讀取光敏電阻的值,並顯示在序列埠監控視窗

  • 光敏電阻的S針腳接在A0上,+接在3.3V ,-接在GND上,如下圖:

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

    • 測試結果:

題目四:按鍵的使用

  • 將按鍵模組的S針腳接在D2上,+接在3.3V ,-接在GND上,如下圖:

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

      • 註:當按鍵未按下時,其值為1;當按下時,其值為0

題目五:LCD顯示器的使用

  • I2C 1602 LCD顯示器的GND接到(NodeMCU)的GND;VCC接到5V;SDA接到D2;SCL接到D1,如下圖:

    • 註:I2C 1602 LCD顯示器的VCC要接到5V,如果接到3.3V會電力不足,顯示不清楚

  • 先到官網找到 Arduino Liquid cristal I2C library,並下載回來

    • 註:另外一個檔案 I2C scanner sketch 是用來偵測此LCD的位址,因為我已知我的LCD Address是 0x3F,所以沒有去下載使用!

    • 我的習慣作法是將此檔解壓縮(Arduino-LiquidCrystal-I2C-library-master.zip)解壓縮,再放到Arduino/libraries的資料夾下

    • 也可以使用「匯入程式庫」的方式來匯入

    • 先小試一下,在LCD上顯示Hello World,, 利用拖曳的方法,完成如下的程式 (檔案於附件)

    • 接下來再測試一下,在LCD上顯示光敏電阻的值

題目六:紅外線動作感測器(PIR Motion Sensor) 或稱人體紅外線感測器的使用

  • 紅外線動作感測器(PIR Motion Sensor)

  • 接線說明:

    • 將紅外線動作感測器的OUTPUT接在D3上,POWER接在3.3V ,GND接在GND上

    • I2C 1602 LCD顯示器的GND接到(NodeMCU)的GND;VCC接到5V;SDA接到D2;SCL接到D1

    • LED的正極接D4、負極接GND

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

  • 測試結果

題目七:超音波測距模組的使用,將距離顯示在LCD上

  • 接線說明:

    • 將超音波測距模組VCC接到(NodeMCU)的3.3V;GND接GND;Trig接D5;Echo接D6

    • I2C 1602 LCD顯示器的GND接到(NodeMCU)的GND;VCC接到5V;SDA接到D2;SCL接到D1

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

題目八:伺服馬達的使用

  • 接線說明:

    • 伺服馬達SG90的S針腳接在D4上,+接在3.3V ,-接在GND上 (註:+接在3.3V,伺服馬達電力不足會常罷工,所以還是要接在5V會比較好)

    • I2C 1602 LCD顯示器的GND接到(NodeMCU)的GND;VCC接到5V;SDA接到D2;SCL接到D1

  • 利用拖曳的方法,完成如下的程式 (檔案於附件)

  • 轉成Arduino語言,如下

    • #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Servo.h> LiquidCrystal_I2C lcd(0x3F,16,2); Servo servo_2; void setup() { lcd.begin(); servo_2.attach(2); } void loop() { servo_2.write((random(30,150))); delay(100); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Angle :"); lcd.setCursor(0, 1); lcd.print(servo_2.read()); delay(3000); }

題目九:OLED的使用

    • OLED顯示器的GND接到(NodeMCU)的GND;VCC接到3.3V;SCL接到D1;SDA接到D2,如下圖:

    • 註:另外一個檔案 I2C scanner sketch 是用來偵測此OLED的位址,測得我的OLED Address是 0x3C!

  • 使用「匯入程式庫」的方式來匯入

      • 結果如下:

  • 官網範例測試

    • ArialMT_Plain_10表字體大小

      • #include <Wire.h> #include "SSD1306.h" SSD1306 display(0x3C, 4, 5); void setup() { Serial.begin(9600); display.init(); display.setTextAlignment(TEXT_ALIGN_LEFT); display.setFont(ArialMT_Plain_10); display.drawString(0, 0, "Hello World!"); display.display(); delay(3000); display.setTextAlignment(TEXT_ALIGN_LEFT); display.setFont(ArialMT_Plain_16); display.drawString(0, 12, "OLED"); display.display(); delay(3000); display.setTextAlignment(TEXT_ALIGN_LEFT); display.setFont(ArialMT_Plain_24); display.drawString(0, 26, "is cool!"); display.display(); } void loop() { }