มาลองควบคุม Raspberry Pi ด้วย Anto กัน </tutorial>

สำหรับใครที่ยังไม่รู้จัก Anto.io นะครับ Anto ก็เป็นหนึ่งใน Internet of Things Platform ที่ให้บริการฟรีๆเพื่อใช้เป็นตัวกลางในการสื่อสารและเป็นอีกหนึ่งตัวช่วยที่ทำให้การพัฒนานวัตกรรมทางด้าน IoT ของเราง่ายยิ่งขึ้น ในขณะนี้ทาง Anto ก็รองรับอยู่หลายอุปกรณ์กันเลยทีเดียวไม่ว่าจะเป็น Arduino, ESP8266 และอื่นๆ ใครสนใจสามารถเข้าไปดูรายละเอียดเพิ่มเติมได้ทางเว็บไซต์ของทาง Anto เองได้เลยนะครับ (https://www.anto.io)

สำหรับในวันนี้ผมก็จะมาสอนการใช้งาน Anto กับ Raspberry Pi 3 ควบคุมหลอด LED โดยใช้ภาษา Python บนระบบปฏิบัติการ Raspbian กัน. โดยที่อุปกรณ์ที่ผมจะใช้ในบทความนี้จะเป็นตัว Raspberry Pi 3 และใช้ภาษา Python version 2.7 ครับ :3

สมัครบัญชีผู้ใช้ Anto

ก่อนอื่นเลยให้เราสมัครบัญชีผู้ใช้ Anto และเพิ่มตัวอุปกรณ์ที่จะใช้ลงใน Anto Control Panel กันก่อนนะครับ

สมัครสมาชิก Anto (https://www.anto.io/register)

จากนั้นให้ Login เข้าไปเพื่อเพิ่มอุปกรณ์ที่เราจะใช้กันในบทความนี้กันครับ

Create Thing and Channels

สำหรับวิธีการสร้าง Thing และ Channels สามารถเข้าไปดูได้ทาง (https://antoiot.gitbooks.io/th-doc/content/create_thing_&_channels.html)

Create Things and Channel!

ในที่นี้ผมสร้าง Thing ที่มีชื่อว่า “ MyRPi3” 
และสร้าง Channels ประเภท “Switch on/off” มาจำนวน 3 อันสำหรับหลอด LED 3 หลอด

  • LED1 (Channel: ‘led1’)
  • LED2 (Channel: ‘led2’)
  • LED3 (Channel: ‘led3’)

จากนั้นให้ลงระบบปฏิบัติการ Raspbian ลงบน Raspberry Pi 3

ติดตั้ง Python และ AntoLib

หลังจากลงระบบปฏิบัติการ Raspbian เรียบร้อยแล้วก็ให้ติดตั้ง Python 2.7 และ PIP โดยใช้ Commands ดังนี้ครับ

$ sudo apt-get install python
$ sudo apt-get install python-pip

สำหรับ PIP ก็คือตัว Package Manager สำหรับภาษา python ที่ผมจะนำมาใช้ในการติดตั้ง Package ที่มีชื่อว่า “AntoLib” (https://pypi.python.org/pypi/antolib) ซึ่งเป็น Python Package เพื่อใช้กับบริการของ Anto สามารถติดตั้ง Package “Antolib” ได้โดยใช้คำสั่ง “pip install”

$ pip install antolib
Antolib บน pypi.python.org

GPIO

ในบทความนี้ผมได้ใช้ GPIO 3 ช่องบน Raspberry Pi 3 สำหรับ LED จำนวน 3 ตัว และขา ground

  • LED1(Channel: “led1”) ใช้ GPIO หมายเลข 17
  • LED2(Channel: “led2”) ใช้ GPIO หมายเลข 27
  • LED3(Channel: “led3”) ใช้ GPIO หมายเลข 22
  • ขา Ground

Python and AntoLib 101!

ขั้นตอนต่อไปเรามา Coding กันครับ

  • ก่อนอื่นเลยให้ import antolib และ RPi.GPIO กันก่อนเลยครับ
  • หลังจากนั้นก็จะ Setup GPIO
  • จากนั้นในตัวแปร user, key, thing ให้เราเอาค่า ที่ได้จาก anto.io จากขั้นตอน “Create thing and channels” มา copy& paste ใส่ได้เลยครับ
  • จากนั้นเราจะสร้าง Anto object ขึ้นมาโดย 
    anto = antolib.Anto(user, key, thing)
  • จากนั้นผมจะสร้าง Callback function ขึ้นมา 2 ตัวสำหรับ “เมื่อมีการ Connect” (connectedCB) และ “เมื่อมีข้อมูลที่เรา sub ไว้ส่งเข้ามา” (dataCB)
  • จากนั้นผมจะสร้าง function setup() ไว้เพื่อเรียกใช้งานตอนเริ่มรันโปรแกรม
  • หากใครเคยชินกับ Function Loop ใน Arduino มาก่อนก็สามารถสร้าง Function มา แล้วก็สามารถใช้ anto.loop(myLoop) ได้เช่นกันครับ (ในที่นี้ผมลองเล่นโดยการให้ทุกๆ 4 วินาทีจะมีการพิมพ์ค่า i ที่นับเพิ่มไปทีละหนึ่ง)
Anto.loop()
  • จากนั้นผมจะเรียกใช้ function setup() และ anto.loop(myLoopFunction)

Function setup()

ใน funciton นี้ผมจะกำหนดค่า callback function (onConnected, onData) ให้กับ anto โดยใส่ function connectedCB และ dataCB เข้าไปครับ
จากนั้นผมก็จะสั่งให้ anto connect ผ่านทาง function “anto.mqtt.connect()” ครับ

Function connectedCB()

ใน function นี้ผมจะให้มีการ subscribe ตัว Led ทั้ง 3 อันของเราเมื่อทำการเชื่อมต่อ

Function dataCB()

ใน function นี้เมื่อมีข้อมูลที่เรา subscript เข้ามาแล้วเราจะเอาไปควบคุมหลอด LED ทั้ง 3 อันของเราต่อ โดยที่จะมีตัวแปรหลักๆ อยู่ 2 ตัว

  • channel: จะเป็นค่าที่บอกว่าค่าที่ได้รับเข้ามาเป็นค่าของ channel ไหน
  • msg: จะเป็นข้อมูลของ channel นั้นๆ ในที่นี้เป็น channel ประเภท “switch on/off” ก็จะมีเพียงแค่ค่า 0 หรือ 1 เท่านั้น

จากนั้นผมจะเช็คค่าผ่าน if condition เพื่อเช็คว่าเป็น channel ของ led ตัวไหน แล้วค่อยไปสั่ง GPIO.output ให้ไฟติดหรือไฟดับ

Let’s play!

หลังจากเราทำกันมาเสร็จแล้วต่อมาเราก็จะมาลองเล่นกันครับ :)
เข้าไปที่ Anto Control Panel เลือกเข้าไปที่เมนู “Thing” จากนั้นเข้าไปดู channel ต่างๆของเราโดยการกด ที่ปุ่มแว่นขยายข้างหลัง Thing ของเราครับ

Thing List

จากนั้นให้ลองคลิก on/off switch ของแต่ละ channel เล่นๆ ก็จะพบว่าหลอด LED ของเราก็จะทำการเปิดปิดไปตามที่เราควบคุมบน Anto เลยครับ

อู้หุววววว!! ควบคุมผ่าน Smart Phone ก็ยังได้เลย

เพียงเท่านี้เราก็สามารถสร้างอุปกรณ์ IoT ที่สามารถควบคุมหลอด LED จากที่ไหนก็ได้(ที่มีอินเตอร์เน็ต) ได้ฟรีๆและง่ายๆกันเลยครับ (ถ้าไม่รวมค่าอุปกรณ์พวก Raspberry Pi3 นะครับ 555) :)

Github Repo

สำหรับตัว Code ต่างๆ ในบทความครั้งนี้ผมได้ push ขึ้นไปบน Github แล้วนะครับ
ใครสนใจสามารถเข้าไป clone มาได้เลยทาง (Github) : https://github.com/AntoIOT/anto-python
สำหรับวันนี้ก็ขอบคุณมากๆที่เข้ามาอ่านกันนะครับ :)