วันอังคารที่ 16 มิถุนายน พ.ศ. 2558

Basic LUA Script (ตอนที่ 1)

การพัฒนา Application ใน NodeMCU นั้นจะต้องใช้ภาษาโปรแกรมมิ่งที่ชื่อว่า LUA ซึ่ง LUA นั้นเป็นภาษา Script ที่มีการใช้งานอยู่ทั่วไปอยู่แล้วบน Plateform PC สามารถดูรายล่ะเอียดได้ ที่นี่ ทั้งนี้ NodeMCU เองมีรากฐานมาจาก eLua Project ซึ่งรองรับ MCU หลายค่ายอยู่เหมือนกัน

NodeMCU API

ในการพัฒนา Application บน NodeMCU ด้วย Lua Script นั้นข้อนข้างง่ายเพราะ NodeMCU นั้นได้มีการสร้าง API ให้เราเรียกใช้งานได้ข้อนข้างสะดวก เช่น
  • การจัดการเกี่ยวกับ Hardware เช่น การ Restart ตัว Hardware (node module)
  • เรื่องของระบบ File (file module)
  • การจัดการเกี่ยวกับ Wifi ทั้ง AP และ Station
  • ใน NodeMCU ก็ยังมี timer ให้เราใช้งาน (timer module)
  • GPIO (gpio module)
  • PWM (pwm module)
  • Network (net module)
  • การใช้งาน MQTT (mqtt module)
  • การทำงานกับ Json Data (cjson module)
  • การใช้งาน OLED LCD i2c (u8g module)

การอ้างอิง GPIO ทางด้าน Hardware  กับ NodeMCU



ใน NodeMCU จะไม่ได้ใช้หมายเลข GPIO ของ Hardware ในใช้งานตรง ๆ แต่จะมี Table Mapping ใช้ในการอ้างอิงด้วย Index แทน เช่น Index 5 จะเท่ากับ GPIO14 ก่อนทำการทดลองให้ลองกลับไปอ่าน Setup NodeMCU ในการทำงานแบบ Interactive Mode

การใช้งาน GPIO ด้วย Lua Script

การใช้งาน GPIO ของ ESP8266 นั้นเราต้องกำหนด Direction ก่อนว่าเราต้องการใช้เป็น Input หรือ Output


gpio.mode()

Description

initialize pin to GPIO mode, set the pin in/out mode, internal pullup.

Syntax

gpio.mode(pin, mode, pullup)

Parameters

pin: 0~12, IO index
mode: gpio.OUTPUT or gpio.INPUT, or gpio.INT(interrupt mode) pullup: gpio.PULLUP or gpio.FLOAT, default: gpio.FLOAT
ตัวอย่าง Code การ Set Mode GPIO

gpio.read()

Description

read pin value.

Syntax

gpio.read(pin)

Parameters

pin: 0~12, IO index

Returns

number:0 - low, 1 - high


     -- set gpio 0 as output.
    gpio.mode(0, gpio.OUTPUT)

gpio.write()

Description

set pin value.

Syntax

gpio.write(pin)

Parameters

pin: 0~12, IO index
level: gpio.HIGH or gpio.LOW
ตัวอย่าง Code การอ่านค่าสถานะ Input และ Output
    -- read value of gpio 0.
    gpio.read(0)
ตัวอย่าง Code การเขียนค่าสถานะ Output
    -- set pin index 1 to GPIO mode, and set the pin to high.
    pin=1
    gpio.mode(pin, gpio.OUTPUT)
    gpio.write(pin, gpio.HIGH)



Donate

การใช้งาน MyPi ESP-DEV

MyPi ESP-DEV เป็น ESP8266 Development Board ที่ได้ทำงานต่อขาของ ESP8266 ออกมาให้พร้อมใช้งาน และมีวงจร regulator 3.3v มาให้บนบอร์ดเรียบร้อยโดยที่จ่ายไป 5-7 Volt DC



MyPi ESP-DEV Pin Layout


ในบอร์ดก็ยังได้มี Port สำหรับการต่อ i2c และ DHT-11, 12 มาให้พร้อมไม่ต้องไปต่อสายภายนอกเพิ่มเติม



ช่องต่อ i2c สามารถต่อใช้งาน OLED LCD ได้เลยทำให้สะดวกเวลาในการ Develop


สำหรับการต่อสายเพื่อทำการ Upload File Script ให้เราต่อสายจาก USB To Serial ตรงๆ ได้เลยเพราะในวงจรได้ทำการสลับ RX กับ TX ไว้ให้แล้ว



USB To Serial                          ESP-DEV
          RX            <-------->            RX
          TX            <-------->            TX
          GND         <-------->            GND



การต่อใช้งาน DHT11, 22 จะใช้ Connector ที่อยู่ทางด้านล่างของ ESP8266 โดยที่

Pin 1 <----->  3.3V
Pin 2 <----->  Data
Pin 3 <----->  NC
Pin 4 <----->  GND

การต่อใช้งานจริงทั้ง OLED LCD กับ DHT22





Donate

การใช้งาน OLED LCD กับ NodeMCU

OLED (Organic Light Emitting Diodes) จอแสดงผล หน้าจอ 128x64 ขนาด 0.96" เชื่อมต่อแบบ i2c ใช้ไฟได้ทั้ง 3.3V หรือ 5V ให้จอสว่างแสดงผลมองเห็นได้อย่างชัดเจน และประหยัดไฟ สามารถวาดภาพกราฟฟิกส์เป็นรูปต่าง ๆ หรือทำเป็นเมนูตามแบบที่ต้องการได้



ใน NodeMCU ก็ไม่มีการเพิ่ม Module ที่ใช้งานมาให้เราแล้วนั่นคือ 

u8g module

สำหรับตัวที่เราจะใช้นั้นใช้ Driver เบอร์ SSD1206 Interface แบบ i2c แต่ก่อนจะใช้งานได้ต้องมั่นใจได้ว่าเป็น NodeMCU Firmware Version ล่าสุดแล้วเพราะไม่งั้นจะใช้ u8g Module ไม่ได้ Firmware Version ล่าสุดสามารถ Download ได้ ที่นี่ 

Download Code ตัวอย่าง(Link อยู่ด้านล่าง) Upload Code โดยใช้โปรแกรม  ESPlorer โดย Click ที่ปุ่ม Upload


หลังจากที่ Upload เสร็จแล้วให้กดปุ่ม Reload ที่อยู่ทางด้านขวา จะมีปุ่มเพิ่มขึ้นมาที่มีชื่อตามชื่อ File ตามที่เรา Upload ไป จากนั้นให้ click ขวาที่ปุ่มนั้น แล้วเลือก เมนู Compile xxx.lua จากนั้นจะได้ File xxx.lc เพิ่มขึ้นมา ทำการทดสอบโดย click ที่ปุ่ม xxx.lc


ในการใช้งานขั้นตอนแรกเราต้องทำการกำหนดค่าของ i2c ก่อน โดยที่ตัวแปร sda = 3 (GPIO0) scl = 4 (GPIO2)



ตัวอย่างการใช้งาน








Donate