บทความนี้สอนการประยุกต์ใช้ Flask เพื่อสร้างเป็น REST API Server บนระบบ Revolution Pi ซึ่งจะทำให้ระบบอื่นสามารถอ่านค่า I/O จาก RevPi ผ่าน Method ต่าง ๆ ในเทคโนโลยี RESTful ได้ เช่น GET เป็นต้น
กรุณาเตรียมอุปกรณ์ และซอฟต์แวร์ที่ต้องใช้ ตามรายการดังต่อไปนี้
อุปกรณ์ที่ต้องใช้
- คอมพิวเตอร์ จำนวน 1 เครื่อง
- RevPi Core หรือ RevPi Connect จำนวน 1 ตัว
- RevPi DI หรือ RevPi DIO จำนวน 1 ตัว
ซอฟต์แวร์ที่ต้องใช้
- โปรแกรม VNC Viewer
ขั้นตอนการติดตั้งโปรแกรม
1) ทำการติดตั้งโปรแกรม Flask ในอุปกรณ์ RevPi Controller โดยใช้คำสั่ง
pip install Flask
2) ทำการติดตั้งโปรแกรม Flask-RESTful ในอุปกรณ์ RevPi Controller โดยใช้คำสั่ง
pip install Flask-RESTful
ให้เลือก Cancel หากมีข้อความให้ใส่ keyring password ในขั้นตอนนี้
3) ทำการติดตั้งโปรแกรม Flask-Cors ในอุปกรณ์ RevPi Controller โดยใช้คำสั่ง
pip install Flask-Cors
ให้เลือก Cancel หากมีข้อความให้ใส่ keyring password ในขั้นตอนนี้
4) ทำการรัน Python Code ตามตัวอย่างด้านล่าง เพื่ออ่านค่า Digital Input ของ RevPi ทุกช่องที่กำหนดไว้ (ในที่นี้ คือ I_1 ถึง I_6)
Download
from flask import Flask, request
from flask_cors import CORS
import revpimodio2
app = Flask(__name__)
CORS(app)
@app.route('/diall')
def diall():
revpi = revpimodio2.RevPiModIO(autorefresh=True)
cluster = [str(revpi.io.I_1.value),
str(revpi.io.I_2.value),
str(revpi.io.I_3.value),
str(revpi.io.I_4.value),
str(revpi.io.I_5.value),
str(revpi.io.I_6.value)]
revpi.cleanup()
return str(cluster)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown')
def shutdown():
shutdown_server()
return 'Server shutting down...'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
สังเกตว่า การกำหนดค่า @app.route(‘/diall’) จะหมายถึง ผู้ใช้สามารถเข้าถึงข้อมูล Digital Input ทุกช่องที่กำหนดไว้ ผ่านทาง GET Method ด้วย REST API ได้โดยง่าย เช่น http://<RevPi IP Address>:5000/diall
โดยในตัวอย่างนี้มีการกำหนดค่า IP Address ของ RevPi ไว้ที่ 192.168.1.160 ทำให้สามารถใช้คอมพิวเตอร์ ในการเปิด Web Browser และกรอกค่า URL เป็น http://192.168.1.160:5000/diall ก็จะสามารถเข้าถึงข้อมูล Digital Input ของ RevPi DI หรือ RevPi DIO ได้ตามรูปด้านล่าง
5) ทั้งนี้ผู้ใช้สามารถทำการรัน Python Code ตามตัวอย่างด้านล่าง เพื่ออ่านค่า Digital Input ของ RevPi เฉพาะช่องที่ต้องการได้
Download
from flask import Flask, request
from flask_cors import CORS
import revpimodio2
app = Flask(__name__)
CORS(app)
@app.route('/di/<channel>')
def di(channel):
revpi = revpimodio2.RevPiModIO(autorefresh=True)
str_combine = "revpi.io." + channel + ".value"
cluster = eval(str_combine)
revpi.cleanup()
return str(cluster)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown')
def shutdown():
shutdown_server()
return 'Server shutting down...'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
สังเกตว่า การกำหนดค่า @app.route(‘/di/<channel>’) จะหมายถึง ผู้ใช้สามารถเข้าถึงข้อมูล Digital Input ช่องที่ต้องการได้ ผ่านทาง GET Method ด้วย REST API ได้โดยง่าย เช่น http://<RevPi IP Address>:5000/di/<channel> โดยรูปแบบมาตรฐานของพารามิเตอร์ <channel> ที่กำหนดใน PiCtory คือ I_1, I_2 ฯลฯ
โดยในตัวอย่างนี้มีการกำหนดค่า IP Address ของ RevPi ไว้ที่ 192.168.1.160 ทำให้สามารถใช้คอมพิวเตอร์ ในการเปิด Web Browser และกรอกค่า URL เป็น http://192.168.1.160:5000/di/I_1 ก็จะสามารถเข้าถึงข้อมูล Digital Input ช่องที่ 1 ของ RevPi DI หรือ RevPi DIO ได้ตามรูปด้านล่าง
สังเกต บรรทัดสุดท้าย app.run(debug=True, host=’0.0.0.0′) เป็นการรันโปรแกรมในโหมด Debug หากไม่ต้องการรันในโหมด Debug และต้องการเปลี่ยนพอร์ตจาก 5000 เป็นพอร์ต 8001 สามารถแก้บรรทัดนี้ได้ตามโค้ดด้านล่าง
app.run(host='0.0.0.0', port='8001')
หากต้องการรันโปรแกรมในโหมด Production กรุณาศึกษารายละเอียดเพิ่มเติมจากเอกสารเกี่ยวกับ Deploying to Production ของ Flask
ท่านสามารถติดต่อทีมงานเทคสแควร์เพื่อสอบถามข้อมูลเพิ่มเติมเกี่ยวกับการประยุกต์ใช้ Flask เพื่อสร้างเป็น REST API Server บนระบบ Revolution Pi หรือข้อมูลอื่น ๆ เพิ่มเติมเกี่ยวกับ RevolutionPi และ ผลิตภัณฑ์จาก Kunbus
บทความที่เกี่ยวข้อง
สอนการใช้งาน Python ในอุปกรณ์ RevPi Controller (Core / Connect)