پایه های I/O (ورودی خروجی) خود را با استفاده از MQTT کنترل کنید
MQTT (Message Queue Telemetry Transport)
MQTT چیست؟
در این آموزش ما برای برقراری ارتباط با برد Raspberry Pi و استفاده از پین ها به عنوان خروجی برای روشن و خاموش کردن از راه دور ، از MQTT استفاده خواهیم کرد. برای این کار شما به Raspberry Pi و IO Pi نیاز دارید. شما همچنین به یک کامپیوتر دوم نیاز دارید تا به عنوان دستگاه سرور یا میزبان عمل کند.
در ابتدای کار باید i2c را روی Raspberry Pi خود فعال کنید.
sudo apt-get update sudo apt-get install python-smbus
برای نصب نرم افزار مورد نیاز MQTT باید mosquitto را نصب کنید.
sudo apt-get install mosquitto
همچنین باید کتابخانه پایتون paho-mqtt را با استفاده از pip3 نصب کنید.
sudo apt-get install python3-pip
اکنون می توانید paho-mqtt را نصب کنید.
sudo pip3 install paho-mqtt
با نصب کتابخانه ها و پیکربندی Raspberry Pi برای استفاده از i2c ، می توانیم پروژه خود را شروع کنیم.
مرحله ۱ – کلاینت را در Raspberry pi ایجاد کنید تا پیام های MQTT را بشنود و پردازش کند.
برای این آموزش ما با ایجاد یک فایل برنامه جدید پایتون به نام demo_mqtt_client.py کار را شروع خواهیم کرد. برای نوشتن برنامه می توانید از ویرایشگر متن مورد علاقه خود استفاده کنید. می توانید نمونه کاملی از demo_mqtt_client.py را در پوشه ABElectronics_Python_Libraries / IOPi / پیدا کنید.
در ابتدای برنامه خود باید کتابخانه های مورد نیاز را وارد کنید.
#!/usr/bin/env python from IOPi import IOPi import time import paho.mqtt.client as mqtt
چون که می خواهیم از هر دو کنترل کننده MCP23017 استفاده کنیم، دو نمونه از کلاس IOPI ایجاد خواهیم کرد.
iobus = IOPi(0x20) iobusb = IOPi(0x21)
با نمونه های جدید کلاس IOPI ما می توانیم به همه روش های موجود برای کنترل برد IO Pi دسترسی پیدا کنیم. همه پین ها را به عنوان خروجی تنظیم کنید و آنها را خاموش کنید
iobus.set_port_direction(0, 0x00) iobus.write_port(0, 0x00) iobus.set_port_direction(1, 0x00) iobus.write_port(1, 0x00) iobusb.set_port_direction(0, 0x00) iobusb.write_port(0, 0x00) iobusb.set_port_direction(1, 0x00) iobusb.write_port(1, 0x00)
در ادامه روش ها را برای سرویس گیرنده MQTT اضافه خواهیم کرد.
def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("topic/iopi")
def on_message(client, userdata, msg): p,s = msg.payload.decode().split(",") if (int(p) <= 16): print("IO Bus 0 Pin: " + p) print("IO Bus 0 mode: " + s) iobus.write_pin(int(p), int(s)) else: print("IO Bus 1 Pin: " + p) print("IO Bus 1 mode: " + s) iobusb.write_pin((int(p) -16), int(s))
بروکر=کارگزار
client = mqtt.Client() client.connect("10.0.0.49",1883,60) client.on_connect = on_connect client.on_message = on_message client.loop_forever()
برای اجرای این کد و تنظیم Raspberry Pi خود برای پاسخگویی به پیام های MQTT ، باید اسکریپت را با استفاده از این موارد اجرا کنید:
python3 demo_mqtt_client.py
مرحله ۲ – برای ارسال و پردازش پیام های MQTT ، سرور / کارگزار را در raspberry pi یا سایر رایانه های Linux ایجاد کنید.
برای ارسال پیام به کلاینت Raspberry Pi شما به یک کامپیوتر سرور نیاز دارید که همان نرم افزار دستگاه کلاینت را اجرا خواهد کرد.
ما از کد اوبونتو برای کد زیر استفاده کردیم اما هر سرور / کارگزار MQTT همان عملکرد را انجام می دهد.
برای نصب نرم افزار مورد نیاز MQTT باید mosquitto را نصب کنید.
sudo apt-get install mosquitto
sudo apt-get install python3-pip
اکنون می توانید paho-mqtt را نصب کنید.
sudo pip3 install paho-mqtt
در اسکریپت ساده از دستورات برای روشن یا خاموش کردن پین با استفاده از “topic / iopi” مشتری استفاده می شود. با پیام شماره پین ، حالت ۵،۱ می چرخد پایه ۵ در گذرگاه دوم در IO Pi Plus دسترسی هایی است که با استفاده از پین های ۱۷ تا ۳۲ انجام می شود.
#!/usr/bin/env python3 import paho.mqtt.client as mqtt import time # Create client instance and connect to localhost client = mqtt.Client() client.connect("localhost",1883,60) # Publish message to topic/iopi and set pin 1 on bus 1 to on client.publish("topic/iopi", "1,1"); time.sleep(2) # Publish message to topic/iopi and set pin 1 on bus 1 to off client.publish("topic/iopi", "1,0"); time.sleep(2) # Publish message to topic/iopi and set pin 1 on bus 2 to on client.publish("topic/iopi", "17,1"); time.sleep(2) # Publish message to topic/iopi and set pin 1 on bus 2 to off client.publish("topic/iopi", "17,0"); client.disconnect();
هنگامی که این کد را اجرا می کنید ، پین ۱ در باس ۱ به مدت دو ثانیه روشن می شود، سپس پین را خاموش کرده و با استفاده از پین ۱ در گذرگاه ۲ (پین ۱۷) تکرار می کنید و دو ثانیه بعد خاموش می شود.
python3 demo_mqtt_server.py
در ادامه می توانید مطالعه کنید
- MQTT چیست؟
- ساخت آلارم ساعت با برد Raspberry Pi پای و DS1307
- تشخیص رنگ با Raspberry Pi و سنسور TCS3200
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳
- پروتکل SNMP - شهریور ۱۵, ۱۴۰۳