LAB5 — [Mini Project] -Raspberry PI Model 3B+ ส่งค่าอุณหภูมิและความชื้นจากเซนเซอร์ DHT22 ไปยัง NETPIE 2020 แล้วนำเสนอบน Freeboard

Wipha Khunmuen
5 min readApr 30, 2020

--

NETPIE เป็น IoT (Internet of Things) Cloud Platform ที่พัฒนาขึ้นโดยทีมงานวิจัยและเปิดให้ บุคคลทั่วไปใช้งานโดยมี Web Portal ที่ให้สามารถลงทะเบียนและจัดการตัวตนและสิทธิ์ของแอปพลิเคชั่น และอุปกรณ์ได้ที่เว็บไซต์ https://netpie.io ตั้งแต่เดือนกันยายน 2558 เป็นต้นมา NETPIE เป็น Middleware ที่มีหัวใจหลัก (นอกเหนือจากส่วนอื่นๆ) เป็น Distributed MQTT Brokers ซึ่งเป็นเสมือนจุด นัดพบให้สิ่งต่างๆ(Things) มาติดต่อสื่อสารและทำงานร่วมกันผ่านวิธีการส่งข้อความแบบ Publish/Subscribe NETPIE มีโครงสร้างสถาปัตยกรรมเป็นคลาวด์อย่างแท้จริงในทุกองค์ประกอบ ทำให้ สามารถขยายตัวได้อย่างอัตโนมัติ (Auto-scale) สามารถดูแลและซ่อมแซมตัวเองได้อัตโนมัติเมื่อส่วนหนึ่ง ส่วนใดในระบบมีปัญหา (Self-healing, Self-recovery) โดยไม่ต้องพึ่งผู้ดูแลระบบ การบริหารจัดการระบบ เป็นแบบ Plug-and-Play ไม่ต้อง Configure หรือปรับแต่ง ในฝั่งอุปกรณ์ NETPIE มี Client Library หรือที่ เรียกว่า Microgear ซึ่งทำหน้าที่สร้างและดูแลช่องทางสื่อสารระหว่างอุปกรณ์กับ NETPIE รวมไปถึงรักษา ความปลอดภัยในการส่งข้อมูล Microgear เป็น Open Source และสามารถดาวน์โหลดได้จาก https://github.com/netpieio โดย ณ ปัจจุบันมี Microgear สำหรับ OS และ Embedded Board หลักๆ ที่ เป็นที่นิยมในหมู่นักพัฒนาเกือบทุกชนิด โมเดลการสื่อสารของ NETPIE แสดงไว้ในรูป

ประโยชน์ของ NETPIE

  1. ช่วยลดการใช้ทรัพยากรของการเชื่อมต่อ NETPIE ช่วยให้อุปกรณ์สามารถสื่อสารกันได้โดยผู้ใช้ไม่ต้องกังวลว่า อุปกรณ์นั้นจะอยู่ที่ใด เพียงแค่ นำMicrogear Library ไปติดตั้งในอุปกรณ์ NETPIE จะรับหน้าที่ดูแลเชื่อมต่อให้ทั้งหมด ไม่ว่าอุปกรณ์นั้น จะอยู่ในเครือข่ายชนิดใด ลักษณะใด หรือแม้กระทั่งเคลื่อนย้ายไปอยู่ที่ใด ผู้ใช้สามารถตัดปัญหาในการ เข้าถึงอุปกรณ์จากระยะไกล (Remote Access) ด้วยวิธีการแบบเดิมๆ เช่น การใช้ Fixed Public IP Address หรือการตั้ง Port Forwarding ในเราท์เตอร์และการต้องไปลงทะเบียนกับผู้ให้บริการ Dynamic DNS ซึ่งทั้งหมดล้วนมีความยุ่งยาก ลดความยืดหยุ่นของระบบ ไม่เพียงเท่านั้น NETPIE ยังช่วยให้การ เริ่มต้นใช้งานเป็นไปโดยง่าย โดยออกแบบให้อุปกรณ์ถูกค้นพบและเข้าสู่บริการโดยอัตโนมัติ (Automatic Discovery, Plug-and-Play)
  2. ช่วยลดภาระด้านความปลอดภัยของข้อมูล NETPIE ถูกออกแบบให้มีระดับและสิทธิ์ในการเข้าถึงในระดับ Fine Grain กล่าวคือผู้ใช้สามารถ ออกแบบได้เองทั้งหมดว่า สิ่งใดมีสิทธิ์คุยกับสิ่งใด สิ่งใดมีสิทธิ์หรือไม่ — เพียงใดในการอ่านหรือเขียนข้อมูล และสิทธิ์เหล่านี้จะมีอายุการใช้งานนานเท่าใด หรือจะถูกเพิกถอนภายใต้เงื่อนไขใด เป็นต้น
  3. ยืดหยุ่นต่อการขยายระบบ NETPIE มีสถาปัตยกรรมเป็นคลาวด์เซิร์ฟเวอร์อย่างแท้จริงในทุกองค์ประกอบของระบบ ทำให้เกิด ความยืดหยุ่นและคล่องตัวสูงในการขยายตัว นอกจากนี ้โมดูลต่างๆ ยังถูกออกแบบให้ทำงานแยกจากกัน เพื่อให้เกิดสภาวะ Loose Coupling และสื่อสารกันด้วยวิธี Asynchronous Messaging ช่วยให้ แพลตฟอร์มมีความน่าเชื่อถือได้สูง นำไปใช้ซ้ำและพัฒนาต่อได้ง่าย ดังนั้นผู้พัฒนาไม่จำเป็นต้องกังวลกับ การขยายตัวเพื่อรับโหลดที่เพิ่มขึ้นในระบบอีกต่อไป

สิ่งที่เราจะทำก็คือทดลองRaspberry PI Model 3B+ ส่งค่าอุณหภูมิและความชื้นจากเซนเซอร์ DHT22 ไปยัง NETPIE 2020 แล้วนำเสนอบน Freeboard

อุปกรณ์ที่ใช้

  • Raspberry PI Model 3B+
  • เซนเซอร์วัความชื้นและอุณหภูมิ DHT22

การต่อวงจรบน Raspberry PI

ขา + ต่อกับ 5 V , ขา + ต่อกับ GND , ขา OUT ต่อกับ GPIO14

การใช้งาน NETPIE

  1. สมัครสมาชิก ไปที่เว็บ https://auth.netpie.io/signup เราก็ทำการกรอกข้อมูลเรียบร้อย แล้วรหัสเข้าระบบจะส่งมาให้ที่ E-mail ที่เรากรอกลงทะเบียนไว้

2. เข้าระบบแล้วจะเจอหน้าแบบนี้ หน้าที่เราเคยสร้างโปรเจคทั้งหมด

3.เราจะสร้างโปรเจค ให้เราคลิกไปที่ปุ่มสีฟ้าที่มีสัญลักษณ์เป็น + แล้วเราก็ตั้งชื่อโปรเจค ในตัวอย่างเราจะตั้งชื่อเป็น Test1 แล้วเราก็กด Create

4. เราก็จะได้โปรเจคที่เราสร้างขึ้นมาที่หน้าต่าง

5.แล้วเราก็คลิกเข้าไปที่โปรเจคที่เราสร้างขึ้นมา ก็คือ test1 จะปรากฎหน้าจอที่แสดงข้อมูลภาพรวมของโปรเจค

6. เราจะมาสร้าง Device โดยคลิกที่เมนู Device Lists แล้วเราก็ไปกด Create แล้วก็ตั้งชื่อ ในตัวอย่างจะเป็น Test แล้วก็กดCreate

7. หลังจากที่เรากด Create แล้วจะได้หน้าตาแบบนี้

8. เราก็คลิกเข้าไปที่ Device ที่เราสร้างขึ้นมาปรากฏหน้าจอแสดงรายละเอียดข้อมูลต่าง ๆ ของ Device เหล่านั้น รวมถึง Key, Token และ Secret ที่จะนำไปใช้เพื่อให้ Device สามารถเชื่อมต่อเข้ามายัง Platform

9. เราจะเอาKey ไปใช้กับ Device เพื่อเชื่อมต่อกับ Platform

Key ใช้สำหรับการเชื่อมต่อของ Device มายัง Platform กรณีเชื่อมต่อผ่าน MQTT Protocol ให้เลือกใช้งาน MQTT Client Library ที่เหมาะสมหรือรองรับกับ Device ที่จะใช้ในการเชื่อมต่อ โดยการเชื่อมต่อของ MQTT จะต้องใช้ 4 Paramters คือ Host, Client id, Username และ Password โดยดูข้อมูลที่จะนำมาใช่ สามารถระบุค่าได้ดังนี้

Host → mqtt.netpie.io

Port →1883 (mqtt), 1884 (mqtts)

Client ID →Client ID ของ Device ที่สร้างขึ้นใน NETPIE

Username →Token ของ Device ที่สร้างขึ้นใน NETPIE

Password →ยังไม่ต้องระบุ (ใช้สำหรับกรณีที่ต้องการตรวจสอบที่เพิ่มมากขึ้น)

10. เราจะมาเชื่อมต่อPlatform ด้วย MQTT Box โดยดาวน์โหลดได้จาก http://workswithweb.com/mqttbox.html เมื่อดาวน์โหลดเรียบร้อยให้เปิดโปรแกรมขึ้นมาดังรูป

11. เราจะไปที่คลิกที่ปุ่ม “Create MQTT Client” เพื่อสร้างการเชื่อมต่อไปยัง MQTT Server (ในที่นี่คือ NETPIE Platform)

12.หลังจากที่เรากรอกข้อมูลเสร็จแล้ว ก็กดปุ่ม save แล้วจะได้หน้าต่างแบบนี้คือมีการเชื่อมต่อกันแล้ว ดังรูป

เราก็มาดูที่ NETPLE สถานะจะขึ้นสีเขียว

13. เราจะมาทดสอบว่าสามารถเชื่อมต่อ Platform ได้จริงโดย Publish เข้าหาตัวเอง การเซ็ตค่า Topic ที่จะ Publish/Subcribe ให้ขึ้น Topic ด้วย @msg/ (คลิกปุ่ม “Subcribe” ก่อนที่จะคลิกปุ่ม “Publish”)

ตัวอย่าง ใช้ @msg/me แล้วส่งข้อความ Hello

ติดตั้งโปรแกรมต่างๆบน Raspberry PI

  1. เราจะปรับปรุงโปรแกรมทั้งระบบ RPi

$ sudo apt-get update

2.เราจะทำการติดตั้งและเช็คอุปกรณ์

2.1การต่ออุปกรณ์

VCC ต่อกับ PIN 1 (5V)

Data out ต่อกับ PIN 7 (GPIO4)

GND ต่อกับ PIN 6 (GND)

2.2 เราจะพิมพ์ Code ในTerminal ดังนี้

$sudo apt-get update

$sudo apt-get install build-essential python-dev

$git clone https://github.com/adafruit/Adafruit_Python_DHT.git

$cd Adafruit_Python_DHT

/Adafruit_Python_DHT $sudo python setup.py install

2.3 แล้วเราก็พิมพ์คำสั่ง ทดสอบอุณหภูมิ

/Adafruit_Python_DHT $cd examples

/Adafruit_Python_DHT/examples $sudo ./AdafruitDHT.py 22 4

4.เราจะติดตั้ง Python Module สำหรับเชื่อมต่อ MQTT

$ pip3 install paho-mqtt==1.3.1

5.พิมพ์โค้ด ใช้ Python3 เขียน

import sysimport timeimport RPi.GPIO as GPIOimport Adafruit_DHTimport paho.mqtt.client as mqttimport jsonimport ossensor = Adafruit_DHT.DHT22pin = 14GPIO.setmode(GPIO.BCM)GPIO.setup(23, GPIO.OUT)GPIO.output(23, GPIO.LOW)NETPIE_HOST = “mqtt.netpie.io”CLIENT_ID = “5b30974b-9eea-44c7–85c4-e81ea70229a5” #Client ID ของ Device ที่สร้างขึ้นใน NETPIEDEVICE_TOKEN = “H2iK14QcywvhQEMoh9zt6mYjArxV8d8D” # Token ของ Device ที่สร้างขึ้นใน NETPIEsensor_data = {‘temperature’: 0, ‘humidity’: 0}def on_connect(client, userdata, flags, rc):print(“Result from connect: {}”.format(mqtt.connack_string(rc)))client.subscribe(“@shadow/data/updated”)client = mqtt.Client(protocol=mqtt.MQTTv311,client_id=CLIENT_ID, clean_session=True)client.username_pw_set(DEVICE_TOKEN)client.on_connect = on_connectclient.connect(NETPIE_HOST, 1883)client.loop_start()try:while True:humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)if humidity is not None and temperature is not None:humidity = round(humidity)temperature = round(temperature)print(u’Temp={0:0.1f}*C Humidity={1:0.1f}%’.format(temperature, humidity))sensor_data[‘temperature’] = temperaturesensor_data[‘humidity’] = humidityprint(json.dumps({“data”: sensor_data}))client.publish(‘@shadow/data/update’, json.dumps({“data”: sensor_data}), 1)time.sleep(5)else:print(‘Failed to get reading. Try again!’)except KeyboardInterrupt:passclient.loop_start()client.disconnect()

หลังจากที่เรากำหนด Server, Client ID และ Device Token ของ NETPIE 2020 เพื่อนำไประบุตัวตนในการเชื่อมต่อ NETPIE 2020

เราจะทำการรันโค้ด

สร้างหน้า Freeboard

  1. เราไปคลิกที่ปุ่ม Freeboard ทำการ Create เราตั้งชื่อ ในตัวอย่างจะตั้งว่า test หลังจากนั้นก็ Create

2. จะแสดงหน้าที่เราสร้างขึ้น แล่วให้เราเข้าไปคลิกที่test

3. จะได้หน้าแบบนี้ดังรูป

Main Menu

  • IMPORT เป็นเมนูสำหรับอัพโหลดไฟล์ Configuration ของหน้า Freeboard ที่บันทึกเก็บไว้
  • EXPORT เป็นเมนูสำหรับนำไฟล์Configuration ออก (Export)
  • RESET เป็นเมนูสำหรับล้าง Datasource และ Widget ที่สร้างไว้
  • ADD PANE เป็นเมนูสำหรับเพิ่ม Panel ในการจัดวาง Widget

4. แล้วเราก็ไปคลิกที่ปุ่ม ADD ตรง DTATSOURCE แล้วทำตามพิมพ์ชื่อ ใส่ Client ID และ Device Token ของ NETPIE 2 2020 ที่เราทำตามเชื่อมกัน

5.กด save แล้วจะได้ตามรูป

6. เราจะสร้าง Widget : Gauge สำหรับแสดงค่าอุณหภูมิและความชื้น ไปที่เมนู ADD PANE กด + แล้วทำการเลือกGauge จะได้ดังรูป

7.เรามากำหนด Datasource และข้อมูลต่างๆ สำหรับแสดงค่า Temperature และ Humidity แล้วกด save

ผลลัพธ์ที่ได้ ก็จะแสดงอุณหภูมิ ดังภาพ

อ้างอิง

ที่มา https://netpie.io/tutorials/RaspberryPi

การสร้างโปรเจคNETPLE https://docs.netpie.io/getting-started.html

คู่มือการใช้งาน NETPIE http://203.159.154.241/innogoth/wp-content/uploads/2017/09/NETPIE-WS_v23.pdf

--

--