LAB3 — [M2] — Blynk Broker on Raspberry Pi

Puwanat Torcheewee
8 min readApr 15, 2020

--

พบกับรูปแบบ IOTs ในแบบฉบับของ application ที่น่าสนใจ “Blynk” ที่สามารถเชื่อมต่ออุปกรณ์ Device ของเราเข้ากับ internet ได้อย่างง่ายดาย ไม่ว่าจะเป็น Arduino, ESP8266, ESP32, Rasberry pi หรือแม้แต่อื่นๆ ที่รวมเอา widget ต่างๆมาควบคุมแทนการเขียน code ยากๆ ไม่เพียงเท่านั้น ทางเลือกในการเชื่อมต่อเข้ากับ Blynk server เรายังสามารถใช้ได้ทั้ง WiFi และเครือข่ายมือถือ โดยสามารถ Download application นี้ได้ฟรีทั้งระบบ IOS และ Android

LAB3 — [M1] — Mosquitto MQTT Broker on Raspberry Pi : link

  1. ติดตั้ง Blynk Application บนมือถือ

2. ติดตั้ง library Blynk เพื่อใช้งานกับ ESP32 บน Arduino IDE จาก

https://github.com/blynkkk/blynk-library/archive/master.zip

หรือโหลดในโปรแกรม Arduino ไปที่ Sketch -> Include Library -> Manage Lib search = blynk

3. เริ่มต้นใช้งาน Blynk เราต้องสมัคร ลงทะเบียน เพื่อใช้งานก่อน ให้เลือกที่คำว่า Create New account เพื่อสร้างการเชื่อมต่อกับ application กับ Email ของเรานอกจากนี้ เรายังสามารถ Connect เข้ากับ server ของ Blynk ของเราเองได้ โดยเลือก Custom และใส่ IP Address ของ Server เราเอง โดยกดที่รูป Problems Signing In แล้วเลื่อน scroll จาก Blynk ไป Custom

ต่อมาเป็นการสร้าง Project ของเราด้วย Blynk ให้กดที่สัญลักษณ์หกเหลี่ยมมุมขวาบนเพื่อตั้งค่าโดยในหน้านี้เราสามารถตั้งชื่อ Project ของเราและเลือกรูปแบบ Hardware ที่เราจะใช้ได้ Hardware ให้เลือก ESP32 Dev Board

โดยทุกๆครั้งที่เริ่มสร้างโปรเจคใหม่ AUTH TOKEN จะถูกเปลี่ยนใหม่เสมอ ซึ่ง KEY นี้เองที่เป็นเสมือนกุญแจสำหรับเชื่อมต่อ โดยที่เราไม่ต้องใช้ user, password เราสามารถกดที่คำว่า “E-mail” เพื่อส่ง KEY นี้เข้าเมลเราได้

4. การใช้งานบน Arduino IDE

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

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

และในบรรทัด char auth[] = “YourAuthToken”; ให้ไป copy key ของ Auth Token จากใน Email ที่เราได้รับมาใส่

บรรทัด Blynk.begin(auth,”ssid”,”pass”); ให้ใส่ชื่อ Wifi ที่เราใช้เชื่อมต่อกับ app ใน ssid และ password wifi ใน pass และในกรณีเราเปลี่ยนรูปแบบการเชื่อมต่อ Wifi เป็นแบบ IP Address เราสามารถเขียนโค้ดได้ว่า

จากนั้นให้ทำการ Upload ลง board แล้วเปิด Serial Monitor จนกระทั่งมีข้อความขึ้นแบบนี้

5. สร้างโปรเจคของเราบน Blynk

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

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

เลือกรูปแบบ pin จะให้เป็นขา Digital หรือ Virtual ก็ได้ ซึ่งรูปแบบ Virtual จะไม่ใช่การรับค่าจากขาตรงๆ เป็นเหมือนการสร้างตัวแปรมาเก็บค่าอีกที และเลือกขา GPIO ให้ตรงกับอุปกรณ์ที่เราจะต่อ เมื่อเสร็จแล้วกด play เพื่อให้ App เริ่มทำงาน

การตั้งค่า

  • Button1
  • SWITCH
  • Select Pin
  • # Virtual -> Variable
  • # Digital -> Real Port
  • # GP2 < ESP32 On Board LED >

กด play เพื่อให้ App เริ่มทำงาน

ซึ่งรูปแบบการตั้งค่า Button นี้จะแทนการเขียนรูปแบบโคoดเดิมๆใน void setup () ได้เลย

เมื่อแก้ไขโปรแกรมแล้วจะได้ ดังนี้

ESP32 PINOUT

6. ทดสอบการทำงานโดยการคุม LED GPIO2 หรือ On Board DOIT ESP32 Kit Ver1

ผลลัพธ์ที่ได้

การทดสอบอ่านอุณหภูมิด้วย DHT-22 แล้วแสดงผลที่ Blynk

  • Download and Install DHT22 Library to Arduino IDE

หรือดาวน์โหลด Library ในโปรแกรม Arduino

1. ต่อวงจร DHT-22 เข้าที่ขา D15

2. ทดสอบโปรแกรม ให้แก้ไข

  • Auth
  • SSID
  • Passord

3. ที่ Blynk ให้ใช้ Gauge และ Port V10 และ Port V11

สร้าง “Blynk Server” บน Raspberry Pi

Blynk ที่ใช้ตอนเเรกจะใช้ server ของ blynk ชึ่งใน app จะมี energy ในการสร้างน้อยมาก เเต่ถ้าตั้ง server เอาเองเเล้วเราก็ตั้งเอาเลยว่าจะได้ energy เท่าไร

การติดตั้ง

  1. check java ที่ติดตั้งใน raspberry pi เรา
$ java –version

2. ติดตั้ง java 8 jdk and jre

$ sudo apt install openjdk-8-jdk openjdk-8-jre

****ถ้าลง Java ไม่ได้ให้ใช้คำสั่งนี้เพื่อลบตัวเดิมออกก่อน

$ sudo apt-get purge openjdk*

3. Download blynk server

$ wget "https://github.com/blynkkk/blynk-server/releases/download/v0.41.12/server-0.41.12-java8.jar"

4. Start Blynk Server

$ java -jar server-0.41.12-java8.jar -dataFolder /home/pi/Blynk

5. Blynk server จะสร้าง web ให้เราจัดการ

https://RapiiIP:9443/admin

ถ้าขึ้นต่างแบบนี้ให้เลือกที่ขั้นสูง แล้วคลิกที่ “ไปยัง ip_rpi (ไม่ปลอดภัย)”

6. Login ด้วย

username : admin@blynk.cc
password : admin

7. วิธีเพิ่ม Energy โดย User -> admin@blynk.cc

8. เมื่อขึ้นหน้าต่าง Edit ไปที่ Energy แล้วใส่ค่า Energy ที่เราต้องการ

9. Login Blynk apps

username : admin@blynk.cc
password : admin
ip : net วงเดียวกัน
port : ตามไฟล์ config

******* ถ้า IP ของ Ethernet ไม่ได้ ให้ใช้ IP server Broker server ของ WLAN โดยพิมพ์คำสั่งนี้ใน Terminal

$ ifconfig

10. เมื่อเลือก New Project แล้วกำหนดค่าเสร็จ ไปเพิ่ม Widget เราก็จะเห็น energy มากขึ้น

ทดสอบ Blynk จาก “Blynk Server บน RPi” ด้วย ESP32

  1. พิมพ์โค้ดนี้ในโปรแกรม Arduino เพื่อทดสอบ

2. token เอาที่หน้าเว็บที่เราเข้าตอนเเรก

3. upload code เเล้วทดสอบการทำงาน

ผลลัพธ์ที่ได้

สร้าง Blynk Private Server ใน Docker Container ที่ DigitalOcean

วิธีการสมัคร DigitalOcean

1. สมัครใช้งาน DigitalOcean
การสมัครใช้งาน DigitalOcean นั้น เป็นเรื่องง่ายมาก โดยคลิกที่ลิ้งก์นี้ เพื่อเข้าสู่หน้าสมัคร ซึ่งจะได้รับ $100 ฟรี (ประมาณ 3,400 บาท) เพื่อนำไปจ่ายเป็นค่าบริการใน DigitalOcean ได้เลย (ในระยะเวลา 60 วัน) จากนั้น ใส่เพียง ชื่อ อีเมล์ และรหัสผ่าน

แล้วทำการเพิ่มบัตรเครดิต (ยังไม่มีการตัดเงิน) หรือ ตัดยอดเข้าระบบ $5 จากนั้นระบบจะเพิ่มเครดิตให้อีก $100

หากเป็นการเพิ่มบัตรเครดิต ทาง DigitalOcean จะทดลองตัดบัตรยอด $5 หรือประมาณ 168 บาท ถ้าตัดสำเร็จแล้วจะคืนเงินให้เหมือนเดิม

เสร็จแล้วสร้าง Project และทำแบบสอบถามนิดหน่อย

2. สร้าง Droplet หรือถ้าเรียกทั่วไปคือ การสร้าง Cloud Server หรือ VPS นั่นเอง

ทำการเลือกระบบที่ต้องการติดตั้งใน Server โดยมีให้เลือกหลาย ๆ ตัว ในที่นี้แนะนำ Ubuntu 18.04.3 x64

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

เลือก Datacenter เป็น สิงคโปร์

เปลี่ยนชื่อ droplet ได้ตามต้องการ จากนั้นกด Create

เราจะได้ Droplet มาและมีอีเมล์แจ้ง ip address , username , password ในการเข้าใช้งาน SSH (PuTTY)

3. เชื่อมต่อ Droplet โดยเริ่มต้นให้ดาวน์โหลด PuTTY จากลิ้งก์นี้ จากนั้นเปิดโปรแกรมขึ้นมา ใส่ข้อมูล IP ที่เราได้จากอีเมล์

ใส่ root และ รหัสผ่าน แนะนำให้ copy จากอีเมล์มา แล้ว คลิกขวา เมาส์ ในพื้นที่สีดำ (รหัสผ่านจะไม่ปรากฏให้เห็น) แล้วกด Enter ได้เลย

เมื่อเข้าได้แล้ว ระบบจะให้เราเปลี่ยนรหัสผ่าน โดยให้ใส่รหัสผ่านเก่าก่อน (แนะนำให้ copy จากอีเมล์มา แล้ว คลิกขวา เมาส์ ในพื้นที่สีดำ (รหัสผ่านจะไม่ปรากฏให้เห็น) แล้วกด Enter ได้เลย) จากนั้นให้ตั้งรหัสผ่านใหม่ 2 ครั้ง

เป็นอันเสร็จสิ้นการตั้งค่า

เริ่มการสร้าง Blynk Server

  1. สร้าง Droplet โดยเลือก Image ใน Marketplace ชื่อ Docker 18.09.2~3 on 18.04.3 จากนั้นเลือก Plan ต่ำสุด คือ $10/เดือน เลือก Region : Singapore เมื่อสร้างเสร็จ เราจะได้อีเมล์รหัสผ่านเข้า root
  2. เข้า ssh ด้วย putty โดยใช้รหัสผ่าน root ที่ได้จากอีเมล์ เข้าได้แล้วให้เปลี่ยนรหัสผ่านใหม่
  3. ทดสอบว่า docker และ docker-compose ทำงานด้วยคำสั่ง
# docker
# docker-compose

4. ดาวน์โหลด docker-blynk ด้วย git โดยคำสั่ง

# git clone https://github.com/hortio/docker-blynk.git
# cd docker-blynk

5. ตั้งค่าคอนฟิก โดยแก้ไขไฟล์ server.properties

คำสั่ง
# nano serve.properties
กำหนดค่าตามนี้
server.host = ชื่อโดเมน
contact.email = อีเมล์ของเรา
admin.email = อีเมล์ของเราที่จะเข้าไปแก้ไขข้อมูล
admin.pass = รหัสผ่านตั้งเอง
https.port = 9443
http.port = 8080
initial.energy = 100000000

6. ตั้งค่าคอนฟิก ของระบบส่งอีเมล์ โดยแก้ไขไฟล์ mail.properties

คำสั่ง
# nano mail.properties
กำหนดค่าตามนี้
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.host=smtp.gmail.com
mail.smtp.port=587
mail.smtp.username=อีเมล์ของ gmail ของเรา
mail.smtp.password=รหัสผ่าน gmail ของเรา

การจะส่งเมล์ได้ ตั้งไปตั้งค่าใน account ของ google ที่เราใช้อีเมล์ โดยไปที่ https://myaccount.google.com -> ความปลอดภัย (Security) -> การเข้าถึงของแอปที่มีความปลอดภัยน้อย (Less secure app access) แล้วทำการเปิด (On)

7. สั่งให้ docker-blynk ทำงาน ด้วย docker-compose ด้วยคำสั่ง

# docker-compose up -d

8. ส่ง docker ทำงานทุกครั้งที่ restart ระบบ ด้วยคำสั่ง

# systemctl enable docker

9. เข้าใช้งาน blynk admin ได้ที่
https://ip_server:9443/admin หรือ
http://ip_server:8080/admin
หรือเป็นชื่อโดเมนของเราได้ก็ (โดยตั้ง A record มาที่ IP ของ Blynk Server)
เข้าระบบโดยใช้อีเมล์ และรหัสผ่านที่เราตั้งไว้ในไฟล์ server.properties

10. ดาวน์โหลด Blynk app บน Google play หรือ Apple Store แล้วทำการสมัครสมาชิก และเข้าระบบ ทำการทดสอบสร้าง Project ถ้าทำทุกอย่างถูกต้อง Blynk server ของเราจะส่งอีเมล์ token มาให้เราไปใช้งานต่อได้

11. Login Blynk apps

username : email ที่ตัวเองสมัคร
password : ที่กำหนดไว้
ip : ของ server
port : 9443

12. เมื่อเลือก New Project แล้วกำหนดค่าเสร็จ ไปเพิ่ม Widget เราก็จะเห็น energy มากขึ้น

ทดสอบ Blynk จาก “Blynk Server บน DigitalOcean” ด้วย ESP32

  1. พิมพ์โค้ดนี้ในโปรแกรม Arduino เพื่อทดสอบ

2. token เอาที่หน้าเว็บที่เราเข้าตอนเเรกหรือจะดูที่ email ของตัวเองก็ได้

3. upload code เเล้วทดสอบการทำงาน

ผลลัพธ์จะคล้ายการทดลอง Blynk จาก “Blynk Server บน RPi” ด้วย ESP32 เพียงเปลี่ยนจากรัน Server ไว้บน Pi เราให้ไปรันเป็น image แทน

เอกสาร PDF สำหรับ Offline : link

--

--