Hello Pi - Board raspberry Pi คอมพิวเตอร์จิ๋ว แต่ความสามารถไม่จิ๋ว - EP2 - Pi to internet

1. โปรแกรมควบคุม Raspberry Pi แบบ webserver

       ต่อจาก EP ที่แล้วนะครับ   สวัสดีครับ ในบทความนี้ผมจะมาแนะนำถึงการติดตั้ง Web IO Pi ซึ่งเป็นเว็บแอพลิเคชั่นที่ถูกพัฒนามาจาก ภาษา Python ทำงานร่วมกันกับ REST Frame work ครับ เจ้าตัวนี้มีความสามารถคือ ใช้ในการควบคุม GPIO ของบอร์ด Raspberry pi นั่นเองครับ และซึ่งเราจะใช้ในทดสอบการเขียนโปรแกรมที่มีการกระทำ กับ GPIO คือ ให้เจ้า Web io pi นี้เป็นตัวแสดงผลนั่นเองครับ  เรามาเริ่มการติดตั้งกันเลย



หน้าตาของ Webiopi

1. ทำการ Updata และ Upgrade ให้เรียบร้อยนะครับ จากนั้น ให้ใช้คำสั่ง sudo wget http://webiopi.googlecode.com/files/WebIOPi-0.5.3.tar.gz  เพื่อทำการ ดาวน์โหลดไฟล์ ของ Web IOPi ลงมาพร้อมที่จะทำการติดตั้งนะครับ


wget
ตำสั่ง wget เพื่อดาวน์โหลด

2. ดูว่าไฟล์ ได้ถูกโหลดมาจริงหรือไม่ ด้วยคำสั่ง ls  จากนั้นเมื่อดูแล้วเราจะต้องเจอไฟล์ที่ชื่อว่า WebIOPi-0.5.3.tar.gz นะครับจากนั้นให้ท่าน ใช้คำสั่ง sudo xvzf  WebIOPi-0.5.3.tar.gz  เพื่อทำการแตกไฟล์ ออกมาครับ


zxvf
ทำการแตกไฟล์

3. หลังจากที่เราได้ทำการแตกไฟล์ ออกมาแล้วนะครับ ให้ใช้คำสั่ง ls ดูว่ามีการแตก โฟล์เดอร์ออกมาหรือไม่ เราสังเกตได้จากถ้ามีการแตกไฟล์ WebIOPi-0.5.3 จะเป็นตัวหนังสีสีน้ำเงินดังภาพ จากนั้นให้ใช้คำสั่ง cd WebIOPi-0.5.3/ เพื่อทำการเข้าไปในโฟลเดอร์พร้อมที่จะติดตั้ง


cd
เข้าไปใน Folder WebIOPi

4. หลังจากที่เราเข้ามาใน โฟลเดอร์  WebIOPi-0.5.3 แล้วก็ให้ใช้คำสั่ง ls เพื่อดูไฟล์ เราจะเห็นไฟล์ที่มีชื่อว่า setup.sh ให้เราใช้คำสั่ง sudo ./setup.sh ครับ เพื่อทำการติดตั้ง จากนั้นเราก็รอครับ ในขั้นตอนนี้จะนานนิดหนึ่งนะครับ


setup
ทำการติดตั้ง

5. เมื่อทำการติดตั้งเสร็จเรียบร้อยแล้วนะครับ ให้ใช้คำสั่ง sudo /etc/init.d/webiopi start เพื่อทำการสั่งให้มันเริ่มทำงานนจะครับ หรือ อยากจะสั่งให้มันหยุดทำงาน ก็ใช้คำสั่งเดิมครับเพียงเปลี่ยนจาก start เป็น stop เท่านั้นเองครับ  sudo /etc/init.d/webiopi stop


start
start service

6. เมื่อเราทำการสั่ง start แล้วต่อไปก็เป็นขั้นตอนที่รอคอยเลยครับ นั่นคือการทดสอบนั่นเอง ครับ ให้ท่านทำการเปิด Web browser ขึ้นมาแล้ว ใส่ IP ของ บอร์ด เราเข้าไปที่ช่อง URL นะครับจากนั้นก็ต่อท้ายด้วย :8000/webiopi/ นะครับ ยกตัวอย่างของ ผมเป็น 192.168.1.9:8000/webiopi/ นะครับ ส่วนท่านไหน IP ของท่านคืออะไรก็ใส่ของท่านไปนะครับ ถ้าการติดตั้ง ถูกต้องสมบูรณ์ มันจะเด้ง หน้าต่างขึ้นมาให้เรา ป้อน user และ password นะครับ user : webiopi  และ password : raspberry นั่นเองครับ


enteruser
User & Password

.      หลังจากที่ป้อนเสร็จ แล้วเมื่อเราเข้าสู่ระบบ ก็จะพบกับหน้าจอของ Web IOPi ดังนี้ครับ ก็เป็นอันว่าจบ ขั้นตอนการติดตั้ง


weiopi
WebioPI

7. เราจะ ตั้งค่าให้มัน รันทันทีที่มีการ boot ระบบ ขึ้นมาด้วยคำสั่ง sudo update-rc.d webiopi defaults  ทีนี้ เมื่อมีการ boot ระบบขึ้นมาเราจะสามารถใช้งาน Webiopi ได้ทันที ครับ


setdefault


2. แนะนำเครื่องมือช่วยพัฒนาระบบ – MQTTLens Addon


                       ปัจจุบันเทคโนโลยีที่กำลังมาแรงสำหรับนักพัฒนาด้าน Embedded (ไม่ได้แค่เฉพาะ
Embedded อย่างเดียวครับ) เป็นเทคโนโลยีที่กล่าวกันมากคงจะหนีไม่พ้น IoT ซึ่งเป็นเทคโนโลยี
ใหม่ในยุคนี้เลยก็ว่าได้ แรงขนาดที่ว่า Microsoft เอง ก็ยังพอร์ต Windows 10 มาวิ่งเล่นบน
Raspberry Pi แถมยังใจดีติด IoT มาให้ด้วย ซึ่งผมยังไม่ได้ตามลงไปดูว่าใช้ Broker ตัวไหน และ
มี Library ให้ใช้งานมาด้วยหรือไม่? หรือไม่ผมก็เข้าใจผิดเกี่ยวกับมันครับถ้าผิดพลาดก็ขออภัย
มานะที่นี้ด้วยครับ.
                        IoT มันคืออะไร พอค้นดูมีหลายลิงค์อธิบายไว้มากมาย เช่น Internet of Things เมื่อ
คอมพิวเตอร์เริ่มคุยกันเองได้ , โลกแห่ง IoT มาถึงแล้ว , IoT เทคโนโลยีที่ธุรกิจต้องรู้. ลองนึก
ภาพดูครับว่าถ้าหากอุปกรณ์สามารถสั่งงานไปมาหากันได้ผ่าน www ไม่ว่าจะเป็น PC, Smart
Phone หรือแม้แต่อุปกรณ์ขนาดเล็กพวก Micro-Controller, PLC, HUB, Switch หรืออะไรก็
แล้วแต่ที่มันสามารถต่อระบบ Network ไม่ว่ามันจะอยู่ที่บ้าน ที่โรงงาน ไร่ นา ฟาร์มโรงเรือน
โรงงานอุตสาหกรรมหรือที่อื่นๆที่มีระบบเน็ตเวอร์ที่เข้าถึง www ได้เราจะสามารถควบคุมมันได้
ทั้งหมดที่ไหนก็ได้ในโลกใบนี้
                        IoT ทำมีวิธีการทำงานอย่างไร องค์ประกอบหลักของ IoT จะมี 3 ส่วนคือ
Broker, Publisher และ Subscriber. ซึ่งการรับและส่งข้อมูลนั้นมันจะส่งข้อมูลไปมาหากันนั้น
จะส่งผ่านตัวกลางนั้นก็คือ Broker Server โดยตัวส่งนี้จะเรียกว่า Publisher ส่งข้อมูลขึ้นไปยัง
Broker พร้อมระบุหัวข้อ (Topic) ที่ต้องการส่งข้อออกไป จากนั้นตัวรับซึ่งเรียกว่า Subscriber
ถ้าหากตัวรับต้องการรับข้อมูลจากตัวส่งจะต้องทำการ Subscribe หัวข้อ Topic ของ
Publisher นั้นๆ ผ่าน Broker เช่นกัน



 การติดตั้ง MQTT broker & command .ใน Raspberry Pi

เกริ่นนำสักนิดหนึ่ง ตั้งแต่ การเข้ามาของ IOT หรือ Internet of Things ที่กำลังอินเทรนกันอยู่ตอนนนี้ ก็ได้มีความพยายามที่จะหา Protocol ที่เหมาะสำหรับการสื่อสารผ่าน network กับอุปกรณ์พวกไมโครคอนโทรลเลอร์ ก็เลยมีการพัฒนาโปรโตคอลขึ้นมา เพื่อให้เหมาะกับอุปกรณ์เล็กๆ ที่ไม่ต้องการ Header ที่มากไปในการสื่อสารทางเนตเวิร์ก เจ้าโปรโตคอลที่ว่าก็คือ MQTT หรือ MQ Telemetry Transport ไม่รู้ว่าแปลว่าไรเหมือนกัน เอาเป็นว่า ผมอธิบายแบบบ้านๆ เลยหล่ะกัน
image
ในการสื่อสารแบบ MQTT นี้ จะต้องมี MQTT Broker ที่ทำหน้าที่รับข้อความโดยมีหัวข้อ Topic จากผู้ส่ง/จำหน่าย จ่ายแจก หรือ publisher แล้วกระจายส่ิงที่ได้รับมานั้นไปให้ subscriber ที่ได้ทำการลงทะเบียนหัวข้อ Topic นั้นแหละ บอกกับ Broker ไว้แล้ว ว่า ถ้า publisher คน/ตัว ใด ส่ง topic นี้มา ให้เอามาให้ฉัน (subscriber)
อ่านเพิ่มเติม เรื่อง MQTT Protocol ที่รวบรวมไว้ครับ
ตรงส่วน Broker นี้แหละ ที่เราจะเอา Raspberry pi มาทำเป็น MQTT Broker ในที่นี้ ผมใช้ RPi2 ที่ติดตั้ง Raspbian Wheezy
การติดตั้ง MQTT Broker บน RPi
- ทำการ อัพเกรดต่างๆ ก่อน นานหน่อยสำหรับคนที่ไม่ค่อยได้อัพเกรดบ่อย
sudo apt-get upgrade

- แล้วก็รันคำสั่งตามนี้เลยครับ ทีละบรรทัด นะ ใจเย็นๆ ดู Error ด้วย ถ้ามันมี
curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
rm mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo curl -O http://repo.mosquitto.org/debian/mosquitto-wheezy.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients
บน Rpi เราจะมีทั้ง Mosquitto ที่เอาไว้จัดการ MQTT protocol โดยจะทำให้ Rpi เรากลายเป็น MQTT broker และนอกจากนั้น เราได้ติดตั้ง  mosquitto-clients ซึ่งจะทำให้เราสามารถสั่งให้ Rpi เราเป็นได้ทั้ง subscriber และ publisher ได้อีกด้วย
อันนี้ เป็นคลิปวีดีโอทดสอบของผม ผมลองกับเจ้า ESP8266 และโปรแกรมต่างๆ บน PC โดยทำการ subscribe หัวข้อ topic ที่ชื่อ hello/world ที่ถูกส่ง publish มาจาก ESP8266 โดยที่ RPi ทำหน้า MQTT Broker จัดการรับส่งข้อความทาง MQTT Protocol นั่นเอง
Raspberry pi MQTT_Broker



การใช้งานควบคุม IO ผ่าน Blynk Application


       

App สำเร็จรูป Blynk Nodemcu esp8266 (ตอนที่ 1 Blynk คืออะไร)


 
                       Blynk คือ Application สำเร็จรูปสำหรับงาน IOT มีความน่าสนใจคือการเขียนโปรแกรมที่ง่าย ไม่ต้องเขียน App เองสามารถใช้งานได้อย่าง Real time สามารถเชื่อมต่อ Device ต่างๆเข้ากับ Internet ได้อย่างง่ายดาย ไม่ว่าจะเป็น Arduino, Esp8266, Esp32, Nodemcu,Rasberry pi นำมาแสดงบน Application ได้อย่างง่ายดาย แล้วที่สำคัญ Application Blynk ยังฟรี และ รองรับในระบบ IOS และ Android อีกด้วย เป็นอะไรที่น่าสนใจมากๆใช่ไหมครับ คราวนี้เรามาเริ่มกันเลย
ภาพที่ 1 ตัวอย่าง App Blynk
                       ในยุคสมัยก่อน การเขียนโปรแกรมเชื่อมต่อกันระหว่าง อุปกรณ์ 2 ชิ้นเข้าด้วยกันมักจะใช้งานในลักษณะของ Server >>> Client ทำให้เกิดข้อจำกัดต่างๆมากมาย ยกตัวอย่าง เราต้องการเปิดปิดไฟ ผ่านหน้าเว็บ เราก็จะให้ Arduino เป็น Server และ เครื่องคอมพิวเตอร์ (Client) เป็นเครื่องลูก ข้อจำกัดที่เกิดขึ้นคือทรัพยากร เช่น CPU  RAM  ROM ของเราอาจจะไม่พอ มักจะเจอปัญหาเอ๋อบ่อย ค้างไปดื้อๆ ก็มี ทำให้การเขียนโปรแกรมเป็นไปได้ยากต้องประหยัดทรัพยากรให้ได้มากที่สุดเพื่อจะให้สามารถทำงานได้ และการเซ็ต Netword เป็นไปได้ยาก ส่วนใหญ่มักจะใช้ในวง Lan หรือถ้าต้องการ ควบคุบผ่าน Wan จะต้อง Forword Set ระบบ Network จนปวดหัว
ภาพที่ 2 การเชื่อมต่อแบบ Server to Client
                       ต่อมาเป็นยุคของ Cloud เกิดขึ้น บวกกับมี Chip Wifi ราคาถูก Esp8266 ถูกผลิตขึ้นมา แต่ด้วยข้อจำกัดทางด้านทรัพยากร จึงมือวิธีการคิดว่า ถ้านำข้อมูลไปใส่ลงใน Server เลยละแล้วให้ Device ของเราเรียกเข้าไปแก้ไข หรืออ่านข้อมูลโดยตรง ทำให้ความฉลาดของตัวอุปกรณ์ของเราไม่มีวันสิ่นสุดหมดข้อจำกัดหลายอย่าง Device กลายเป็นแค่ตัวรับ Data และส่ง Data มาแสดงเท่านั้น ทำให้ Chip Esp8266 จึงได้รับความนิยมในปัจจุบัน
ภาพที่ 3 ภาพรวมของระบบ Network Blynk
                          วิธีการทำงานของ Blynk เริ่มจาก อุปกรณ์ เช่น Arduino esp8266 Esp32 Rasberry Pi เชื่อมต่อไปยัง Server ของ Blynk โดยตรง สามารถรับส่งข้อมูลหากันได้
                          คอมพิวเตอร์ Smartphone ก็จะเชื่อมต่อกับ Server ของ Blynk โดยตรง กลายเป็นว่า มี Server เป็นสะพานให้เชื่อต่อหากันจึงหมดปัญหาและข้อจำกัดทุกอย่างทำให้อุปกรณ์ของเรามีความฉลาดมากขึ้น
การออกแบบในลักษณะ ภาพที่ 3 เป็นที่นิยมมากในปัจจุบัน เพราะไม่จำเป็นต้อง Set อุปกรณ์ Network ต่างๆ ให้ปวดหัว 
พูดถึงระบบไปแล้วคราวนี้เราจะมาดูความสามารถของ Application Blynk ดูบ้างว่าสามารถทำอะไรได้บ้าง
ภาพที่ 4 ข้อมูลหน้าจอที่จะมาแสดงใน App ของเรา
                            จากภาพที่ 4 เราสามารถเลือก หน้าจอของภาพ คำอธิบาย เกจ์วัดต่างๆ ก็สามารถออกแบบได้เองได้อย่างอิสระอีกด้วย ต้องการอะไรไม่ต้องการอะไรเราสามารถเลือกได้ตาทความของเราได้เลย
ภาพที่ 5 หน้าจอของ App ที่เราได้ทำการสร้างขึ้นมา
จากภาพที่ 5 เราสามารถจับลากจัดเลียงปรับขนาดให้เหมาะสมตรงตามความต้องการของเรา

                          หลังจากเราลง Library Blynk เรียบร้อยแล้วจะมี Example ที่ติดมาด้วยจำนวนมาก ซึ่ง
ในบทความนี้จะขอแนะนำตัวอย่างง่ายๆ เริ่มต้นไปกับ File  Example  Blynk 
Board_Wifi  ESP32_Wifi

ในโค๊ดนี้เราจะสังเกตเห็นว่ารูปแบบการสั่งงานสั้นมากๆใน void loop() มีเพียง
Blynk.run(); เพื่อสั่งงานจากภายนอก ให้ใส่โค๊ดตามนี้นะครับ

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "YourAuthToken";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
void setup()
{ Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
}
void loop()
{ Blynk.run();
}


และในบรรทัด char auth[] = “YourAuthToken”; ให้ไป copy key ของ Auth Token
จากใน Email ที่เราได้รับมาใส่
บรรทัด Blynk.begin(auth,”ssid”,”pass”); ให้ใส่ชื่อ Wifi ที่เราใช้เชื่อมต่อกับ app ใน
ssid และ password wifi ใน pass


ต่อไปเป็นการสร้างโปรเจคของเราบน Blynk
ต่อมาเราจะเริ่มสร้างโปรเจคของเราบน Blynk โดยการกดที่พื้นที่ว่างเปล่าตรงไหนก็ได้ใน
หน้า New project จะปรากฏหน้าต่างของ Widget ให้เราเลือกขึ้นมา


ในบทความรอบนี้เราจะลองให้ดูอะไรที่ง่ายๆ ก่อน ให้ลองเลือก Button widget มาลงบน
พื้นที่ว่างเปล่ามา 1 อัน
จากนั้นเราจะมาตั้งค่าการใช้งานปุ่ม Button กันโดยกดไปที่รูป Button ที่เราเลือกจะ
ปรากฏหน้าต่างแบบนี้ ซึ่งในหน้านี้เราสามารถเปลี่ยนชื่อปุ่มได้ และเลือกโหมด output pin ที่ต่อ
กับอุปกรณ์จาก board ของเราได้


Raspberry Pi - Data Logging

                   เป็นการทำให้ raspberry Pi อ่านข้อมูลมาเก็บเป็น Data logger เพื่อใช้ในการทำ data analysist โดยมีโค๊ดดังนี้

import os
import time
from time import sleep
from datetime import datetime
file = open("/home/pi/data_log.csv", "a")
i=0
if os.stat("/home/pi/data_log.csv").st_size == 0:
file.write("Time,Sensor1,Sensor2,Sensor3,Sensor4,Sensor5\n")
while True:
i=i+1
now = datetime.now()
file.write(str(now)+","+str(i)+","+str(-i)+","+str(i-10)+","+str(i+5)+","+str(i*i)+"\n")
file.flush()
time.sleep(5)<br>file.close()

สามารถเก็บไฟล์ต่างๆ มาเป็น Data logger ได้



ความคิดเห็น

บทความที่ได้รับความนิยม