前言
博主之前學習了用C語言去開發(fā)了51單片機,雖然沒有將各種外設和傳感器都玩遍,但博主基本將一些重要的外設和傳感器通過原理學習加小項目實驗的方式比較深入地玩了一下。眾所周知,51單片機是相對底層的,用來開發(fā)一些大項目的效率會比較低,所以我們很有必要學習一下stm32、esp32的開發(fā)。
博主希望下來學習用MicroPython來開發(fā)esp32,先從esp32的特色功能藍牙和WiFi玩起,再接觸一下之前沒有玩過的傳感器和外設:DHT11溫濕度傳感器、超聲波傳感器、MG60s舵機、PIR紅外傳感器等。整個過程中,我們都會通過MQTT、藍牙、WiFi的形式讓esp32和其他設備進行交互。
一、 ESP32 和 Micropython 簡介
ESP32是一系列低成本,低功耗的單片機微控制器,集成了Wi-Fi和雙模藍牙。 ESP32系列采用Tensilica Xtensa LX6微處理器,包括雙核心和單核版本,內(nèi)置天線開關(guān),RF射頻模塊,功率放大器,低噪聲接收放大器,濾波器和電源管理模塊。ESP32 可作為獨立系統(tǒng)運行應用程序或作為主機 MCU 的從設備,通過 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和藍牙功能。
MicroPython是一種非常小巧的Python解釋器,它能運行于微控制器和其他嵌入式系統(tǒng)中。它的設計使得它可以輕易地運行于微處理器上,并且擁有豐富的類庫,特別適合開發(fā)嵌入式應用程序。MicroPython的核心功能可以在幾秒鐘內(nèi)完成,允許開發(fā)者快速構(gòu)建完整的嵌入式系統(tǒng),而不必編寫大量的代碼。MicroPython還可以被用于在微控制器上控制傳感器和執(zhí)行其他操作,可以幫助開發(fā)者利用微控制器的全部功能。此外,MicroPython還可以被用作與互聯(lián)網(wǎng)連接的IoT設備的開發(fā)平臺,以及其他復雜的嵌入式應用程序。博主這里用的MicroPython的IDE是Thonny和Upycraft。
二、藍牙模組通訊原理簡介
藍牙技術(shù)規(guī)定每一對設備之間進行藍牙通訊時,必須一個為主端,另一為從端,才能進行通信,通信時,必須由主端進行查找,發(fā)起配對,建鏈成功后,雙方即可收發(fā)數(shù)據(jù)。
藍牙主端設備發(fā)起呼叫,首先是查找周圍可被查找的藍牙設備。主端設備找到從端藍牙設備后,與從端藍牙設備進行配對時輸入從端設備的PIN 碼,也有設備不需要輸入PIN碼。配對完成后,從端藍牙設備會記錄主端設備的信任信息,此時主端即可向從端設備發(fā)起呼叫,已配對的設備在下次呼叫不需要重新配對。已配對的設備,做為從端的藍牙耳機也可以發(fā)起建鏈請求,但做數(shù)據(jù)通訊的藍牙模塊一般不發(fā)起呼叫。 鏈路建立成功后,主從兩端之間即可進行雙向的數(shù)據(jù)通訊。在通信狀態(tài)下,主端和從端設備都可以發(fā)起斷鏈,斷開藍牙鏈路。
藍牙設備在出廠前即提前設好兩個藍牙設備之間的配對信息,主端預存有從端設備的PIN 碼、 地址等,兩端設備加電即自動建鏈,透明串口傳輸,無需外圍電路干預。一對一應用中從端設備可以設為兩種類型,一是靜默狀態(tài),即只能與指定的主端通信,不被別的藍牙模組查找;二是開發(fā)狀態(tài),既可被指定主端查找,也可以被別的藍牙設備查找建鏈。藍牙通訊和I2C通訊有相似之處,都存在主機和從機,主機和從機的應答都遵照一定的標準,都有唯一的地址來進行尋找配對。
藍牙技術(shù)利用短距離、低成本的無線連接替代了電纜連接,從而為現(xiàn)存的數(shù)據(jù)網(wǎng)絡和小型的外圍設備接口提供了統(tǒng)一的連接。
三、手機端和ESP32藍牙通訊
1. ESP32藍牙呼吸燈代碼
首先要定義一個藍牙的類,藍牙的類包括初始化函數(shù),連接函數(shù),連接狀態(tài)判斷函數(shù),地址注冊函數(shù),發(fā)送數(shù)據(jù)函數(shù),廣播函數(shù),然后實例化為ble,先調(diào)用狀態(tài)判斷函數(shù)接收其他終端返回的數(shù)據(jù),然后按UTF-8解碼,如果消息是開燈就以打開呼吸燈,如果消息是關(guān)燈就以關(guān)閉呼吸燈
from machine import Pin, PWM
from machine import Timer
from time import sleep_ms
import bluetooth
BLE_MSG = ""
class ESP32_BLE():
def __init__(self, name):
self.led = PWM(Pin(2))
self.freq = PWM(Pin(2)).freq(1000)
self.timer1 = Timer(0)
self.name = name
self.ble = bluetooth.BLE()
self.ble.active(True)
self.ble.config(gap_name=name)
self.disconnected()
self.ble.irq(self.ble_irq)
self.register()
self.advertiser()
def connected(self):
self.led.duty(1023)
self.timer1.deinit()
def disconnected(self):
self.timer1.init(period=100, mode=Timer.PERIODIC, callback=lambda t: led.duty(500))
def ble_irq(self, event, data):
global BLE_MSG
if event == 1: #_IRQ_CENTRAL_CONNECT 手機鏈接了此設備
self.connected()
elif event == 2: #_IRQ_CENTRAL_DISCONNECT 手機斷開此設備
self.advertiser()
self.disconnected()
elif event == 3: #_IRQ_GATTS_WRITE 手機發(fā)送了數(shù)據(jù)
buffer = self.ble.gatts_read(self.rx)
BLE_MSG = buffer.decode('UTF-8').strip()
def register(self):
service_uuid = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'
reader_uuid = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'
sender_uuid = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'
services = (
(
bluetooth.UUID(service_uuid),
(
(bluetooth.UUID(sender_uuid), bluetooth.FLAG_NOTIFY),
(bluetooth.UUID(reader_uuid), bluetooth.FLAG_WRITE),
)
),
)
((self.tx, self.rx,), ) = self.ble.gatts_register_services(services)
def send(self, data):
self.ble.gatts_notify(0, self.tx, data + '\n')
def advertiser(self):
name = bytes(self.name, '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")
if __name__ == "__main__":
ble = ESP32_BLE("ESP32BLE")
led = PWM(Pin(2))
while True:
if BLE_MSG == 'LED ON':
print(BLE_MSG)
for i in range(0,1023):
led.duty(i)
sleep_ms(3)
BLE_MSG = ""
print('LED is ON.')
ble.send('LED is ON.')
elif BLE_MSG == 'LED OFF':
print(BLE_MSG)
for i in range(1023,-1,-1):
led.duty(i)
sleep_ms(3)
BLE_MSG = ""
print('LED is OFF.')
ble.send('LED is OFF.')
sleep_ms(100)
2. 手機端準備
手機端要下載LightBlue這個軟件,下載后需要搜索esp32的藍牙名稱然后連接上
連接上后將16進制編碼轉(zhuǎn)換成UTF-8編碼的格式,要與esp32端保持一致
然后寫入esp32端編好的命令,即"LED ON" 和 “LED OFF” ,然后點擊按鈕就可以發(fā)現(xiàn)esp32上自帶的燈以呼吸燈的方式打開或者關(guān)閉
允許監(jiān)聽后就可以收到esp32發(fā)來的數(shù)據(jù),實驗中每次你在手機端發(fā)出打開或者關(guān)閉呼吸燈的命令后,你的手機都會收到esp32發(fā)來的對應的提醒
文章來源:http://www.zghlxwxcb.cn/news/detail-417939.html
總結(jié)
以上就是今天esp32藍牙篇的入門筆記,本片筆記簡單地介紹了esp32藍牙通訊的應用,但舉一反三地我們可以將該原理應用于其他方面,比如esp32通過藍牙給手機端傳輸超聲波傳感器的距離、手機通過藍牙控制esp32上的舵機等,有趣的實驗等待小伙伴們挖掘。文章來源地址http://www.zghlxwxcb.cn/news/detail-417939.html
到了這里,關(guān)于MicroPython開發(fā)ESP32入門筆記 -- 藍牙篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!