วันจันทร์ที่ 23 กุมภาพันธ์ พ.ศ. 2558

NodeMCU Connect Access Point

ในบทความนี้เราจะมาทำการให้ NodeMCU ของเรา Connect กับ Access Point ก่อนอื่นต้อง Download File init.lua กันก่อน จากนั้นเปิดโปรแกรม ESPlorer กำหนด com port ให้ตรงกับที่ใช้งาน กดป่ม Open จากนั้นเปิด File init.lua ขึ้นมา

ถ้าหากเรายังไม่เคย upload file init.lua มาก่อนเวลาเปิดใช้งานครั้งแรก NodeMCU จะฟ้องว่าไม่พบ File init.lua เพราะ NodeMCU จะเรียกหา File init.lua ขึ้นมาทำงานครั้งแรกที่มีการ Startup ขึ้นมา



ให้เราทำการเปลี่ยน ssid กับ password ให้เป็นที่เราใช้งานอยู่จากนั้นกดปุ่ม save ที่ toolbar 


ถ้าเราเปิด com port ไว้โปรแกรมจะทำการ  Upload File ให้เราทุกครั้งที่มีการ Save File


หลังจาก Upload เสร็จโปรแกรมจะสั่งให้ Run File init.lua โดยอัตโนมัติ



เป็นอันว่ามาถึงตอนนี้ NodeMCU  ของเราก็สามารถใช้งาน WIFI ได้แล้วในบทความต่อไปเราจะมาสร้าง Application กัน



Donate

วันอาทิตย์ที่ 22 กุมภาพันธ์ พ.ศ. 2558

เครื่องมือที่ใช้ในการพัฒนา NodeMCU ด้วยภาษา Lua

สำหรับเครื่องมือที่ใช้พัฒนาผมเองได้ทดสอบมาหลายคัวแล้ว ในที่นี้จะมีอยู่สองตัวที่แนะนำ

โดยส่วนตัวผมชอบ ESPlorer มากกว่าเพราะมี Editor ที่มี Syntax Highlighter ทำให้เราเขียน Script แล้วดูง่ายขึ้น
LuaLoader 

ESPlorer


Donate

Hello Blink

จากที่เราได้ทดลองการทำงานกับ GPIO ของ NodeMCU ด้วยภาษา Lua กันแล้วคราวนี้เราจะมาลองเขียนไฟกระพริบขั้นเทพกัน

Wiring

  • RX -> TX
  • TX -> RX
  • CH_PD -> 3.3V
  • GPIO 0 -> GND
  • VCC -> 3.3V
  • GND -> GND

ใน NodeMCU จะมี Timer ให้เราใช้งานได้ง่ายๆ ส่วน Module อื่น ๆ สามารถศึกษาเพิ่มเติมได้ที่นี่

tmr.alarm()

Description

alarm time.

Syntax

tmr.alarm(id, interval, repeat, function do())

Parameters

id: 0~6, alarmer id. Interval: alarm time, unit: millisecond
repeat: 0 - one time alarm, 1 - repeat
function do(): callback function for alarm timed out

Returns

nil

Example

    -- print "hello world" every 1000ms
    tmr.alarm(0, 1000, 1, function() print("hello world") end )

tmr.stop()

Description

stop alarm.

Syntax

tmr.stop(id)

Parameters

id: 0~6, alarmer id.

Returns

nil

Example

    -- print "hello world" every 1000ms
    tmr.alarm(1, 1000, 1, function() print("hello world") end )

    -- something else

    -- stop alarm
    tmr.stop(1)

ให้ทดลองเขียน Code ใน SerialTerminal ดังนี้แล้วดูผล





Donate

NodeMCU GPIO

ในบทความนี้เราจะมาทำความรู้จักกับ GPIO (General-purpose input/output) ของ NodeMCU กับ ซึ่งการจัดขาและการอ้างอิงจะไม่เหมือนกับ ESP8266 ในรูปด้างล่างเป็นตาราง Mapping ระหว่าง NodeMCU กับ ESP8266

ต่อไปในบทความนี้จะอ่างอิงถึง IO Index 4 = PIN4

ก่อนที่เราจะใช้ GPIO เราต้องกำหนด Direction ก่อนว่าเราจะใช้ IO นั้นเป็น Input หรือ Output โดยการใช้คำสั่ง 

gpio.mode()

Syntax

gpio.mode(pin, mode, pullup)

Parameters

pin: 0~12, IO index
mode: gpio.OUTPUT(สำหรับกำหนด OUTPUT) or gpio.INPUT (สำหรับกำหนด INPUT), or gpio.INT(interrupt mode) pullup: gpio.PULLUP or gpio.FLOAT, default: gpio.FLOAT.

Example

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

gpio.read()

Description

read pin value.

Syntax

gpio.read(pin)

Parameters

pin: 0~12, IO index

Returns

number:0 - low, 1 - high

Example

    -- read value of gpio 0.
    gpio.read(0)

gpio.write()

Description

set pin value.

Syntax

gpio.write(pin)

Parameters

pin: 0~12, IO index
level: gpio.HIGH or gpio.LOW

Returns

nil

Example

    -- set pin index 1 to GPIO mode, and set the pin to high.
    pin=4
    gpio.mode(pin, gpio.OUTPUT)
    gpio.write(pin, gpio.HIGH)

gpio.trig()

Description

set the interrupt callback function for pin.

Syntax

gpio.trig(pin, type, function(level))

Parameters

pin: 1~12, IO index, pin D0 does not support Interrupt.
type: "up", "down", "both", "low", "high", which represent rising edge, falling edge, both edge, low level, high level trig mode separately.
function(level): callback function when triggered. The gpio level is the param. Use previous callback function if undefined here.

Returns

nil

Example

    -- use pin 0 as the input pulse width counter
    pulse1 = 0
    du = 0
    gpio.mode(1,gpio.INT)
    function pin1cb(level)
     du = tmr.now() – pulse1
     print(du)
     pulse1 = tmr.now()
     if level == 1 then gpio.trig(1, "down ") else gpio.trig(1, "up ") end
    end
    gpio.trig(1, "down ",pin1cb)
การกำหนดค่าผ่าน Serial Terminal โดยกำหนดให้ IO Index 4 เป็น OUTPUT ทดลองต่อวงจรตามรูปอ้างอิงกับ ESP8266-01 โดยที่ GPIO2 = IO Index 4

Wiring
  • RX -> TX
  • TX -> RX
  • CH_PD -> 3.3V
  • GPIO 0 -> GND
  • VCC -> 3.3V
  • GND -> GND

ESP8266-01


Set IO Index 4 เป็น OUTPUT 

pin = 4
gpio.mode(pin, gpio.OUTPUT)


หลังจากที่กำหนดแล้วเราก็สามารถกำหนด Logic เป็น 1 หรือ 0 ได้ นั่นก็คือการ On และ Off  LED นั่นเอง

Logic 1 = On

Logic 0 = Off



หวังว่าคงจะมีประโยชน์ไม่มากก็น้อยน่ะครับ ^^




Donate

Lua Interactive Mode

หลังจากที่เราได้ Update Firmware ของ ESP8266 ให้สามารถใช้งาน NodeMCU ได้แล้วเราก็จะสามารถเขียนโปรแกรม(Script) ด้วยภาษา Lua กับ NodeMCU ได้แล้ว ตอนเริ่มใช้งานครั้งแรกเราจะเห็นการแสดง Version ของ NodeMCU ดังรูป


เรามาลอง Hello World กันก่อนเลยพิมพ์ print("Hello World") ลงใน Terminal แล้วกด Enter


NodeMCU ก็จะพิมพ์คำว่า Hello World ออกมาทาง Terminal ตอไปเราจะมาลองหาค่าบวกของตัวเลขผ่านทาง Terminal ให้เราพิมพ์ =1 + 1 แล้วกด Enter


ต่อไปเราจะมาลองต่อ String 2 ค่าเข้สด้วยกัน  ให้เราพิมพ์ ="A".."B"



ส่วนรูปแบบของภาษา Lua เราสามารถศึกษาเพิ่มเติมได้ที่นี่


Donate

ESP8266 Update NodeMCU Firmware

วันนี้ได้มีโอกาศมานั่งเขียนหลังจากที่ สร้างเอาไว้นานแล้ว จะมาแนะนำการ up firmware สำหรับ ESP8266  เพื่อให้สามารถใช้งาน NodeMCU สำหรับ firmware Download ได้ที่นี่จากนั้นให้ต่อวงจรตามรูป

Wiring




  • RX -> TX
  • TX -> RX
  • CH_PD -> 3.3V
  • GPIO 0 -> GND
  • VCC -> 3.3V
  • GND -> GND



จากนั้นก็เปิดโปรแกรม ESP8266Flasher เลือก Com Port ให้ตรงกับอุปกรณ์ของเรา


จากนั้นเลือกที่ Tab Config ที่ Address 0x00000 กดที่ปุมรูปเฟืองแล้วเลือก File ที่ Download มา จากนั้นกดปุ่ม Flash(F) 


ถ้าไม่มีอะไรผิดพลาด โปรแกรมก็จะทำการ upload firmware ให้เราหน้าที่เราก็คือรอจนกว่าจะเสร็จ


หลังจาก upload เสร็จให้เราดึงสาย GPIO0 ออกแล้วปิดไฟที่จ่ายให้กับ Module .แล้วเปิด Serial Terminal ขึ้นมากำหนด Baudrate = 9600 จากนั้นก็เปิดไฟให้กับ Module ที่ Terminal ต้องขึ้นตามรูปเป็นอันใช้งานได้









Donate