Fabriquez un thermomètre BLE et obtenez la température avec Pythonista3

Fabriquez un thermomètre BLE et obtenez la température avec Pythonista3

introduction

À 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!

Chose que tu veux faire

Obtenez la température de votre iPhone à partir du thermomètre BLE (ESP-WROOM-32 + capteur de température).

Ce que vous avez préparé

ESP-WROOM-32(ESP32-DevKitC) Capteur de température DS18B20 iPhone (Pythonista 3 installé)

manière

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.

Image complète

system_ds18b20.png

créer

Connectez ESP-WROOM-32 et DS18B20

DS18B20 est connecté par 1 fil. La fiche technique ressemble à ceci: ds18B20.png Par conséquent, connectez-vous à ESP-WROOM-32 comme suit. esp32_ds18B20.png Connexion terminée esp32_temp.png

Obtenir la température du capteur de température

Communication 1 fil avec DS18B20 pour obtenir la température. Le programme était basé sur feelfreelinux / ds18b20.

Utiliser BLE de ESP-WROOM-32

Code source

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 BLE de Pythonista 3

Code source

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

tester

Exécutez termo_client.py sur Pythonista3. 5C5AAD7B-08A1-43DC-93CC-39F265A8BEF1.jpeg Acquisition réussie !! Un peu de température fraîche.

finalement

__ 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).

Site de référence

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

Fabriquez un thermomètre BLE et obtenez la température avec Pythonista3
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
[Mémo personnel] Obtenez des données sur le Web et faites-en un DataFrame
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Spécifiez le volume sous Linux et jouez le son
Essayez de créer un jeu simple avec Python 3 et iPhone
Faire un point d'arrêt sur la couche c avec python
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
Obtenez UNIXTIME au début d'aujourd'hui avec une commande
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Établissez une connexion VPN SSL SonicWall avec l'interface de ligne de commande Linux
Faites une loterie avec Python
Créez des RPG 2D avec Ren'Py (3) - Boutique d'objets et d'outils
Obtenez le prix d'achat et de vente de la monnaie virtuelle avec l'API de l'échange Zaif et créez un graphique
Faire un feu avec kdeplot
Bénéficiez de l'environnement le plus puissant avec VS Code, Remote-Containers et Remote Docker-Daemon
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Avertir LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe n ° 2
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Obtenir l'URL du ticket JIRA créé par la bibliothèque jira-python
Résolvez le problème du sac à dos Python avec la méthode de branche et liée
Obtenez les conditions de simulation OCTA à partir d'un fichier et enregistrez avec les pandas
Faisons une interface graphique avec python.
Faites un son avec le notebook Jupyter
Faisons une rupture de bloc avec wxPython
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
[Python] Faire de la fonction une fonction lambda
Créer un système de recommandation avec python
Créer un filtre avec un modèle django
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Obtenez une liste des paramètres de caméra qui peuvent être définis avec cv2.VideoCapture et faites-en un type de dictionnaire
Remplacez le nom du répertoire et le nom du fichier dans le répertoire par une commande Linux.
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Comment obtenir la différence de date et d'heure en secondes avec Python
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python
J'obtiens une erreur Python No module nommée'encodings 'avec la commande aws
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
Obtenez le salaire moyen d'un emploi avec des conditions spécifiées sur Indeed.com
Tweet la météo avec bot
Créer un lecteur vidéo avec PySimpleGUI + OpenCV
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Ajustez le module ui de pythonista3
Créez un simulateur de gacha rare avec Flask