1. הקדמה
זוהי דוגמה פשוטה המציגה כיצד לשלוט על דונגל BleuIO המחובר אליו ביגלבון שחור באמצעות סקריפט python.
בעת הפעלת הסקריפט, הוא יבקש תחילה את יציאת ה-com שבה הדונגל מחובר (בדרך כלל '/dev/ttyACM0'). אחרי כן, BleuIO יתחיל לפרסם. כל שנייה 8 הוא ידליק את אחת מהנוריות השחורות של Beaglebone על הסיפון תוך שינוי שם הפרסום BLE כדי לציין איזו LED דולק.
אנו משתמשים בתמונת Linux Debian: 'OMAP3/DM3730 Debian 9.5 2018-10-07 4GB SD LXQT' (https://beagleboard.org/latest-images).
2. על הקוד
אתה יכול לקבל גישה לפרויקט פה
https://github.com/smart-sensor-devices-ab/beaglebone_bleuio_example
אנו משתמשים ב- Adafruit_BBIO ספריית פיתון שמגיעה עם ה-Beaglebone כדי לשלוט על נוריות ה-LED המשולבות. ראשית, אנו מגדירים את שמות הנוריות ולאחר מכן מגדירים אותם כיציאות GPIO. לאחר מכן אנו מגדירים את המסרים הפרסומיים שה-BluIO יעבור ביניהם. בואו נפרק אחד:
"10: 09: 42: 6C: 65: 75: 49: 4F: 20: 4C: 45: 44: 20: 30: 20: 4F: 4E:"
"10" הוא גודל חבילת הפרסום ב-HEX.
"09" הוא הדגל עבור שם המכשיר (שם מקומי מלא).
"42: 6C: 65: 75: 49: 4F: 20: 4C: 45: 44: 20: 30: 20: 4F: 4E" היא החבילה עצמה, מתורגמת מ-HEX ל-ASCII, זה אומר: "BleuIO LED 0 ON"
לאחר מכן, מוצגת למשתמש הודעה להזין את יציאת ה-com שאליה מחובר BleuIO. אם אינך משתמש ב-USB Hub, היציאה צריכה להיות '/dev/ttyACM0'.
אתה יכול לשנות את שם ה-comport בסקריפט של Python ולמלא את יציאת ה-COM שלך.
com_input = "/dev/ttyACM0"
התסריט ממשיך לתוך הלולאה הראשית, שם הוא יוודא תחילה שכל הנוריות כבויות ואז יתחיל לפרסם BLE.
הלולאה חוזרת דרך כל ארבעת הנוריות. בכל איטרציה, הוא מדליק נורית אחת ומפרסם את שם ה-LED ואז ממשיך ללד הבא. פעולה זו תימשך עד לביטול הסקריפט.
import serial import time import Adafruit_BBIO.GPIO as GPIO LED_USR0 = "USR0" LED_USR1 = "USR1" LED_USR2 = "USR2" LED_USR3 = "USR3" GPIO.setup(LED_USR0, GPIO.OUT) GPIO.setup(LED_USR1, GPIO.OUT) GPIO.setup(LED_USR2, GPIO.OUT) GPIO.setup(LED_USR3, GPIO.OUT) LED0_ON_ADV_MSG = "10:09:42:6C:65:75:49:4F:20:4C:45:44:20:30:20:4F:4E:" LED1_ON_ADV_MSG = "10:09:42:6C:65:75:49:4F:20:4C:45:44:20:31:20:4F:4E:" LED2_ON_ADV_MSG = "10:09:42:6C:65:75:49:4F:20:4C:45:44:20:32:20:4F:4E:" LED3_ON_ADV_MSG = "10:09:42:6C:65:75:49:4F:20:4C:45:44:20:33:20:4F:4E:" # Turn off all LEDs GPIO.output(LED_USR0, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR1, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR2, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR3, GPIO.LOW) time.sleep(0.1) print("nBlueIO BeagleBone Example!nn") connecting_to_dongle = 0 com_input = "" start_input = 0 valid_input = 0 while start_input == 0: com_input = input( "Enter Com port of Dongle (default for BeagleBone: '/dev/ttyACM0'):n>>" ) print("nComport to use: " + com_input) input_continue = input( "If your happy with your choice just press Enter to continue the script. Else type E to exit or R to redo your choice. n>>" ) if input_continue.upper() == "E": start_input = 1 elif input_continue.upper() == "": start_input = 1 elif input_continue.upper() == "R": valid_input = 0 start_input = 0 if input_continue.upper() == "E": print("Exiting script...") exit() console = None while 1: try: print("Please wait...") time.sleep(0.5) console.write(str.encode("AT+DUAL")) console.write("r".encode()) time.sleep(0.5) print("Starting Advertising...") console.write(str.encode("AT+ADVSTART")) console.write("r".encode()) time.sleep(0.5) led_turn = 0 # Turn off all LEDs GPIO.output(LED_USR0, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR1, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR2, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR3, GPIO.LOW) time.sleep(0.1) while True: if led_turn == 0: print("nTurning LED USR0 ON") console.write(str.encode("AT+ADVRESP=")) console.write(LED0_ON_ADV_MSG.encode()) console.write("r".encode()) GPIO.output(LED_USR0, GPIO.HIGH) GPIO.output(LED_USR1, GPIO.LOW) GPIO.output(LED_USR2, GPIO.LOW) GPIO.output(LED_USR3, GPIO.LOW) led_turn = led_turn + 1 elif led_turn == 1: print("nTurning LED USR1 ON") console.write(str.encode("AT+ADVRESP=")) console.write(LED1_ON_ADV_MSG.encode()) console.write("r".encode()) GPIO.output(LED_USR0, GPIO.LOW) GPIO.output(LED_USR1, GPIO.HIGH) GPIO.output(LED_USR2, GPIO.LOW) GPIO.output(LED_USR3, GPIO.LOW) led_turn = led_turn + 1 elif led_turn == 2: print("nTurning LED USR2 ON") console.write(str.encode("AT+ADVRESP=")) console.write(LED2_ON_ADV_MSG.encode()) console.write("r".encode()) GPIO.output(LED_USR0, GPIO.LOW) GPIO.output(LED_USR1, GPIO.LOW) GPIO.output(LED_USR2, GPIO.HIGH) GPIO.output(LED_USR3, GPIO.LOW) led_turn = led_turn + 1 elif led_turn == 3: print("nTurning LED USR3 ON") console.write(str.encode("AT+ADVRESP=")) console.write(LED3_ON_ADV_MSG.encode()) console.write("r".encode()) GPIO.output(LED_USR0, GPIO.LOW) GPIO.output(LED_USR1, GPIO.LOW) GPIO.output(LED_USR2, GPIO.LOW) GPIO.output(LED_USR3, GPIO.HIGH) led_turn = 0 time.sleep(8) except KeyboardInterrupt: GPIO.output(LED_USR0, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR1, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR2, GPIO.LOW) time.sleep(0.1) GPIO.output(LED_USR3, GPIO.LOW) time.sleep(0.1) print("Exiting script...") exit() except: print("nnDongle not connected.n") connecting_to_dongle = 0 while connecting_to_dongle == 0: try: print("Trying to connect to dongle...") console = serial.Serial( port=com_input, baudrate=57600, parity="N", stopbits=1, bytesize=8, timeout=0, ) if console.is_open.__bool__(): connecting_to_dongle = 1 print("nnConnected to Dongle in port: " + com_input + ".n") except: print( "Dongle not found. Retrying connection to port: " + com_input + "..." ) time.sleep(5)
3. שימוש בפרויקט לדוגמה
3.1 מה תצטרך
4. כיצד להגדיר פרויקט
4.1 הורדת הפרויקט מ-GitHub
קבל גישה לפרויקט פה
https://github.com/smart-sensor-devices-ab/beaglebone_bleuio_example
או שתשכפל את הפרויקט או הורד אותו כקובץ zip ופתח אותו לתיקיה ב-BeagleBone שלך.
אתה יכול גם ליצור קובץ פיתון חדש באמצעות Cloud9 IDE מה-BeagleBone (הפעל על ידי מעבר אל http://192.168.7.2:3000/)
העתק את הקוד והדבק אותו בקובץ החדש שנוצר.
4.2 התקנת pyserial
כדי להפעיל את הסקריפט תצטרך להתקין את pyserial ספריית python.
הדרך הקלה ביותר לעשות זאת היא פשוט להתחבר ל-BeagleBone באמצעות shh (סיסמת ברירת המחדל היא temppwd):
או באמצעות לשונית bash ב-Cloud9 IDE והקלד:
sudo pip3 install pyserial
5. הפעלת הדוגמה
עבור לתיקיה שבה יש לך את קובץ הסקריפט של python והרץ:
(Pyserial זקוק להרשאות סודו כדי לתפקד.)
sudo python3 name_of_script.py
קישור לכתבת המקור – 2021-12-02 14:02:15