国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

這篇具有很好參考價值的文章主要介紹了物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、目的

??????? 這一節(jié)我們學(xué)習(xí)如何使用我們的ESP32開發(fā)板通過藍牙和手機進行通信。

二、環(huán)境

??????? ESP32 + 手機(筆者用的小米10) + Thonny IDE

三、藍牙介紹

??????? 這個知識大家自行百度吧,這里不再贅述什么是藍牙和藍牙的歷史,以及相關(guān)的專業(yè)知識。

四、手機藍牙調(diào)試APP

??????? 用的最多的是這三個:nRF Connect、BLE調(diào)試助手、LightBlue

筆者用的是:BLE調(diào)試助手

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

為什么用這個?因為小米手機應(yīng)用商店直接可以安裝,其他兩個沒搜到,哈哈。。。大家按需安裝哈!

nRF Connect GitHub 地址:

GitHub - nrfconnect/sdk-nrf: nRF Connect SDK main repositorynRF Connect SDK main repository. Contribute to nrfconnect/sdk-nrf development by creating an account on GitHub.https://github.com/nrfconnect/sdk-nrf

五、調(diào)試代碼

??????? 大家先把下面的代碼,拷貝到Thonny IDE中,保存到ESP32開發(fā)板中。

from machine import Pin
from machine import Timer
from time import sleep_ms
import bluetooth

BLE_MSG = ""  # 定義一個空的變量


class ESP32_BLE():
    def __init__(self, name):
        self.led = Pin(2, Pin.OUT)  # 創(chuàng)建LED對象,此LED為板載的藍色LED,它用的是GPIO口2
        self.timer1 = Timer(0)  # 定時器,ESP32有4個硬件定時器,此處使用的是0
        self.name = name  # 傳進來的參數(shù)name
        self.ble = bluetooth.BLE()  # 創(chuàng)建BLE對象
        self.ble.active(True)  # 啟動藍牙
        self.ble.config(gap_name=name)  # 配置藍牙,給藍牙起個名字
        self.disconnected()  # 調(diào)用函數(shù)執(zhí)行計時器
        self.ble.irq(self.ble_irq)  #藍牙調(diào)用中斷函數(shù)。當(dāng)手機發(fā)送數(shù)據(jù)給ESP32, ESP32藍牙收到數(shù)據(jù)后自動執(zhí)行此中斷
        self.register()  # 注冊
        self.advertiser()  # 廣播

    def connected(self):
        self.led.value(1)   # 值為1表示藍色LED亮
        self.timer1.deinit()  # 取消計時器

    def disconnected(self):
        # 初始化定時器,設(shè)定周期100ms,模式為周期性的,回調(diào)函數(shù)
        self.timer1.init(period=100, mode=Timer.PERIODIC, callback=lambda t: self.led.value(not self.led.value()))

    def ble_irq(self, event, data):
        global BLE_MSG
        if event == 1: #_IRQ_CENTRAL_CONNECT 手機已連接此設(shè)備
            self.connected()  # 調(diào)用函數(shù),實現(xiàn)藍牙沒連上時閃爍,連上后長亮的效果
        elif event == 2: #_IRQ_CENTRAL_DISCONNECT 手機已斷開此設(shè)備
            self.advertiser()  # 調(diào)用函數(shù),進行藍牙廣播
            self.disconnected()  # 藍牙斷開連接后,藍色LED又會閃爍
        elif event == 3: #_IRQ_GATTS_WRITE 手機發(fā)送數(shù)據(jù)給此設(shè)備 
            buffer = self.ble.gatts_read(self.rx)  # 接收來自手機的數(shù)據(jù)
            BLE_MSG = buffer.decode('UTF-8').strip()  # 將受到的數(shù)據(jù)安裝utf-8進行解碼,所以手機發(fā)送數(shù)據(jù)時應(yīng)該為utf-8編碼
            
    def register(self):        
        service_uuid = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'
        reader_uuid = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'
        sender_uuid = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'
        
        # 藍牙是通過服務(wù)來工作的
        services = (
            # 定義一個控制燈的服務(wù)
            (   # 這個括號里的代表一個服務(wù)
                bluetooth.UUID(service_uuid),  # 服務(wù)的ID
                (
                    (bluetooth.UUID(sender_uuid), bluetooth.FLAG_NOTIFY),  # 服務(wù)類型:通知
                    (bluetooth.UUID(reader_uuid), bluetooth.FLAG_WRITE),   # 服務(wù)類型:寫入
                )
            ),
            # 下面也可以定義別的服務(wù)
            # -- 其他服務(wù)
        )

        ((self.tx, self.rx,), ) = self.ble.gatts_register_services(services)

    def send(self, data): 
        self.ble.gatts_notify(0, self.tx, data + '\n')  # 藍牙發(fā)送通知信息

    def advertiser(self):  # 當(dāng)斷開連接時,開始廣播
        name = bytes(self.name, 'UTF-8')  # 將設(shè)備名字轉(zhuǎn)為utf-8格式
        adv_data = bytearray('\x02\x01\x02') + bytearray((len(name) + 1, 0x09)) + name
        self.ble.gap_advertise(100, adv_data)
        print(adv_data)
        print("\r\n")


def buttons_irq(pin):  # 創(chuàng)建BOOT按鍵函數(shù)
    led.value(not led.value())
    print('LED is ON.' if led.value() else 'LED is OFF')
    ble.send('LED is ON.' if led.value() else 'LED is OFF')


if __name__ == "__main__":
    ble = ESP32_BLE("ESP32 BLE")  # 創(chuàng)建一個對象,帶1個實參,后面用來給BLE起名字用

    but = Pin(0, Pin.IN)  # 創(chuàng)建對象,ESP32開發(fā)板的USB接口的右邊的BOOT按鍵的GPIO口為0
    but.irq(trigger=Pin.IRQ_FALLING, handler=buttons_irq)  # 設(shè)置中斷

    led = Pin(2, Pin.OUT) # 創(chuàng)建藍色LED對象

    while True:
        if BLE_MSG == 'led state':  # 如果ESP32收到手機發(fā)來的數(shù)據(jù)
            print("Query: " + BLE_MSG)  # 打印出讀取到的信息
            BLE_MSG = ""
            print('LED is on\n' if led.value() else 'LED is off\n')  # 如果燈亮輸出LED is on.
            sleep_ms(8000)  # 設(shè)置為5秒,大家發(fā)送查詢命令后,手機趕緊切換到通知頁面,等待接收ESP32發(fā)送的通知信息
            ble.send('LED state is on' if led.value() else 'LED state is off')  # 藍牙發(fā)送led數(shù)據(jù)給手機,如果燈亮發(fā)給手機“LED is on.”
        elif BLE_MSG == 'led on':  # 如果ESP32收到手機發(fā)來的數(shù)據(jù)
            print("Command: " + BLE_MSG)  # 打印出讀取到的信息
            BLE_MSG = "" 
            if led.value() != 1:
                led.value(1)
            print('LED state is on\n' if led.value() else 'LED state is off\n')
        elif BLE_MSG == 'led off':  # 如果ESP32收到手機發(fā)來的數(shù)據(jù)
            print("Command: " + BLE_MSG)  # 打印出讀取到的信息
            BLE_MSG = ""
            if led.value() != 0:
                led.value(0)
            print('LED state is on\n' if led.value() else 'LED state is off\n')

        sleep_ms(100)

六、調(diào)試效果

??????? 我們在Thonny中運行代碼,會看到ESP32 的藍色LED燈開始閃爍

?物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?Thonny IDE 打印信息:

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?然后我們在手機上打開BLE調(diào)試助手,連接我們的開發(fā)板

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?然后看到顯示“連接成功”

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?文章來源地址http://www.zghlxwxcb.cn/news/detail-460762.html

此時ESP32開發(fā)板的藍色LED燈停止閃爍 ,變?yōu)殚L亮

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?然后我們就可以讀取一些信息,比如獲得開發(fā)板的名字:

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?然后我們就可以控制開發(fā)板的藍色LED燈,查詢燈的狀態(tài)和控制燈的亮滅

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信?

然后我們切換到通知頁面,代碼會返回查詢的結(jié)果:

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

關(guān)燈:

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?開燈:

物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?

然后我們在Thonny IDE中看到如下打印信息:

?物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信

?

到了這里,關(guān)于物聯(lián)網(wǎng)開發(fā)筆記(53)- 使用Micropython開發(fā)ESP32開發(fā)板之藍牙BLE通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包