מדריך Bluetooth Low Energy (BLE) עבור Beaglebone באמצעות פיתון – Electronics-Lab.com

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on email
פרסומת
X-ray_Promo1


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

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on telegram
Telegram
Share on whatsapp
WhatsApp
Share on email
Email
פרסומת
X-ray_Promo1

עוד מתחומי האתר