Método para implementar retrasos/medición en microsegundos (μs) en Python
Introducción
Recientemente he estado aprendiendo sobre GPIO de Raspberry Pi y quería usar Python para leer datos de un sensor de temperatura y humedad DHT11. El DHT11 utiliza comunicación de bus único y requiere retrasos en microsegundos. Parece que la función sleep() no puede cumplir con este requisito. Luego descubrí que las marcas de tiempo pueden ser precisas hasta siete decimales, es decir, 0.1 microsegundo. Aunque en la práctica probablemente no se alcance esta precisión, debería ser suficiente.
Este método solo es aplicable en sistemas Linux. En Windows, por alguna razón, cualquier intento de retraso da como resultado al menos 1000 microsegundos.
1 segundo (s) = 1000 milisegundos (ms) = 1.000.000 microsegundos (μs)
¿Qué es una marca de tiempo?
Una marca de tiempo es el número total de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC (8:00:00 hora de Beijing del 1 de enero de 1970) hasta el momento actual.
Método de implementación
Se registra la marca de tiempo inicial, luego se entra en un bucle donde en cada iteración se registra una nueva marca de tiempo. La condición del bucle es que la diferencia entre la marca de tiempo actual y la inicial sea menor que el tiempo deseado; el bucle continúa hasta que la diferencia sea mayor o igual al valor establecido.
Código fuente:
import time # Importar el módulo time
# https://blog.zeruns.com/
def delayMicrosecond(t): # Función de retardo en microsegundos
start, end = 0, 0 # Declarar variables
start = time.time() # Registrar el tiempo de inicio
t = (t - 3) / 1000000 # Convertir la entrada t a segundos; -3 es una compensación de tiempo
while end - start < t: # Continuar el bucle hasta que la diferencia de tiempo sea mayor o igual al valor deseado
end = time.time() # Registrar el tiempo de finalización
Uso: Copie y pegue el código anterior en su programa, luego llame a la función delayMicrosecond(t), donde t es el tiempo de retardo en microsegundos.
En el código anterior, t - 3 es una compensación de tiempo, ya que la llamada a la función y la ejecución del bucle también consumen tiempo. Puede ajustar este valor según sus pruebas. En mi prueba con Raspberry Pi 4, descubrí que se consumen aproximadamente 3 microsegundos adicionales, por lo que se resta 3.
Ejemplo
import time # Importar el módulo time
# https://blog.zeruns.com/
def delayMicrosecond(t): # Función de retardo en microsegundos
start, end = 0, 0 # Declarar variables
start = time.time() # Registrar el tiempo de inicio
t = (t - 3) / 1000000 # Convertir la entrada t a segundos; -3 es una compensación de tiempo
while end - start < t: # Continuar el bucle hasta que la diferencia de tiempo sea mayor o igual al valor deseado
end = time.time() # Registrar el tiempo de finalización
a = time.time() # Registrar el tiempo al inicio de la ejecución de la función de retardo
delayMicrosecond(35) # Retraso de 35 microsegundos
b = time.time() # Registrar el tiempo al final de la ejecución de la función de retardo
print("https://blog.zeruns.com/")
print((b - a) * 1000000) # Imprimir el tiempo consumido por la función de retardo
Resultado:
Lecturas recomendadas
- VPS/ servidor en la nube de alta relación calidad-precio y económicos: https://blog.zeruns.com/archives/383.html
- Artículos sobre Python: https://blog.zeruns.com/category/Python/
- Lectura de datos de temperatura y humedad DHT11, DHT22, SHTC3 con Arduino: https://blog.zeruns.com/archives/527.html
- Beneficios exclusivos para estudiantes: descuentos educativos: https://blog.zeruns.com/archives/557.html
- Cómo crear un blog personal: https://blog.zeruns.com/archives/218.html


