Pythonista3 kann übrigens BLE (Bluetooth Low Energy) verarbeiten. Ich habe übrigens noch nie die Bluetooth-Funktion von ESP-WROOM-32 verwendet. Lassen Sie uns die Temperatur vom BLE-Thermometer abrufen!
Ermitteln Sie die Temperatur auf Ihrem iPhone über das BLE-Thermometer (ESP-WROOM-32 + Temperatursensor).
ESP-WROOM-32(ESP32-DevKitC) Temperatursensor DS18B20 iPhone (Pythonista 3 installiert)
Schließen Sie ESP-WROOM-32 und DS18B20 an und messen Sie die Temperatur. Senden Sie die Temperatur mit BLE von ESP-WROOM-32. Wenn Sie sich wirklich für die Temperatur interessieren, erhalten Sie die Temperatur auf Ihrem iPhone.
DS18B20 ist 1-adrig angeschlossen. Das Datenblatt sieht folgendermaßen aus: Stellen Sie daher wie folgt eine Verbindung zu ESP-WROOM-32 her. Verbindung hergestellt
1-Draht-Kommunikation mit DS18B20, um die Temperatur zu ermitteln. Das Programm basierte auf sensefreelinux / ds18b20.
Es ist ein bisschen lang, also habe ich es auf Github gelegt. esp/thermometer ds18b20.c: Ermittelt den Wert vom Temperatursensor. gatts_thermometer.c: Machen Sie ESP32 zu einem BLE-Server. Senden Sie den Sensorwert im READ-Ereignis vom Client.
Das Programm wurde mit dem GATT Server-Beispiel erstellt, das mit [ESP-IDF] geliefert wird (https://qiita.com/mitazet/items/8a4c36bd9e1e45f463fd). In Bezug auf das GATT war die Übersicht über das GATT (Generic Attribute Profile) (http://yegang.hatenablog.com/entry/2014/08/09/195246) sehr hilfreich. Da es nicht kommerzialisiert ist, verwendet UUID einen geeigneten Wert.
Verwenden Sie cb für Pythonista3, um Temperaturdaten abzurufen. Die UUID entspricht dem obigen Programm.
thermo_client.py
import ui
import cb
import sound
import struct
TM_SERVICE_UUID = '00FF'
TM_CHAR_UUID = 'FF01'
class MyCentralManagerDelegate (object):
def __init__(self):
self.peripheral = None
self.temp = 0
def did_discover_peripheral(self, p):
global text_state
print('+++ Discovered peripheral: %s (%s)' % (p.name, p.uuid))
if p.name and 'ESP_THERMOMETER' in p.name and not self.peripheral:
# Keep a reference to the peripheral, so it doesn't get garbage-collected:
self.peripheral = p
cb.connect_peripheral(self.peripheral)
text_state.text = 'Detected'
def did_connect_peripheral(self, p):
print('*** Connected: %s' % p.name)
print('Discovering services...')
p.discover_services()
def did_fail_to_connect_peripheral(self, p, error):
print('Failed to connect')
def did_disconnect_peripheral(self, p, error):
print('Disconnected, error: %s' % (error,))
self.peripheral = None
def did_discover_services(self, p, error):
for s in p.services:
if TM_SERVICE_UUID in s.uuid:
print('+++ Thermometer found')
p.discover_characteristics(s)
def did_discover_characteristics(self, s, error):
if TM_SERVICE_UUID in s.uuid:
for c in s.characteristics:
if TM_CHAR_UUID in c.uuid:
print('read temperature sensor...')
self.peripheral.read_characteristic_value(c)
def did_write_value(self, c, error):
print('Did enable temperature sensor')
def did_update_value(self, c, error):
global text_temp
if TM_CHAR_UUID == c.uuid:
#
self.temp = (c.value[0] + (c.value[1]*256))/16
print(self.temp)
text_temp.text=(str(self.temp) + '℃')
view = ui.View()
view.name = 'THERMOMETER'
view.background_color = 'white'
text_state = ui.TextView()
text_state.frame = (view.width * 0.5, view.height * 0.2, view.width, view.height*0.3)
text_state.flex = 'LRTB'
text_state.font = ('<system>', 18)
text_state.text_color = 'grey'
text_temp = ui.TextView()
text_temp.frame = (view.width * 0.25, view.height * 0.4, view.width, view.height)
text_temp.flex = 'WHLRTB'
text_temp.font = ('<system-bold>', 50)
view.add_subview(text_state)
view.add_subview(text_temp)
view.present('sheet')
delegate = MyCentralManagerDelegate()
print('Scanning for peripherals...')
text_state.text = 'Scanning'
cb.set_central_delegate(delegate)
cb.scan_for_peripherals()
# Keep the connection alive until the 'Stop' button is pressed:
try:
while True: pass
except KeyboardInterrupt:
# Disconnect everything:
cb.reset()
Dies ist auch auf Github. thermo_client.py
Führen Sie termo_client.py auf Pythonista3 aus. Erfolgreiche Akquisition !! Ein bisschen kühle Temperatur.
__ Ist es sinnvoll, es remote zu machen? __ Wird nicht akzeptiert. Es ist nicht sehr nützlich im Haus, aber es kann in der Farm nützlich sein (es spart Strom).
So verbinden Sie Bluetooth von Ubuntu mit ESP32, um Signale zu senden und zu empfangen cb — Connecting to Bluetooth LE Peripherals feelfreelinux/ds18b20 [BLE verwenden] GATT (Generic Attribute Profile) Übersicht