À propos, Pythonista3 peut gérer BLE (Bluetooth Low Energy). Au fait, je n'ai jamais utilisé la fonction Bluetooth d'ESP-WROOM-32. Prenons la température du thermomètre BLE!
Obtenez la température de votre iPhone à partir du thermomètre BLE (ESP-WROOM-32 + capteur de température).
ESP-WROOM-32(ESP32-DevKitC) Capteur de température DS18B20 iPhone (Pythonista 3 installé)
Connectez ESP-WROOM-32 et DS18B20 et mesurez la température. Envoyez la température avec BLE de ESP-WROOM-32. Lorsque vous vous souciez vraiment de la température, recevez la température sur votre iPhone.
DS18B20 est connecté par 1 fil. La fiche technique ressemble à ceci: Par conséquent, connectez-vous à ESP-WROOM-32 comme suit. Connexion terminée
Communication 1 fil avec DS18B20 pour obtenir la température. Le programme était basé sur feelfreelinux / ds18b20.
C'est un peu long alors je l'ai mis sur github. esp/thermometer ds18b20.c: Obtenez la valeur du capteur de température. gatts_thermometer.c: Faire de ESP32 un serveur BLE. Envoyez la valeur du capteur dans l'événement READ du client.
Le programme a été créé à l'aide de l'exemple de serveur GATT fourni avec ESP-IDF. S'agissant du GATT, [Use BLE] GATT (Generic Attribute Profile) Overview a été très utile. Puisqu'il n'est pas commercialisé, UUID utilise une valeur appropriée.
Utilisez cb sur Pythonista3 pour obtenir des données de température. UUID correspond au programme ci-dessus.
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()
C'est également sur github. thermo_client.py
Exécutez termo_client.py sur Pythonista3. Acquisition réussie !! Un peu de température fraîche.
__ Est-il sensé de le rendre distant? __ Ne sera pas accepté. Ce n'est pas très utile à la maison, mais cela peut être utile à la ferme (cela économise de l'énergie).
Comment connecter Bluetooth d'ubuntu à ESP32 pour envoyer et recevoir des signaux cb — Connecting to Bluetooth LE Peripherals feelfreelinux/ds18b20 [Use BLE] Présentation du GATT (Generic Attribute Profile)
Recommended Posts