Hardware > Ordenadores control estaciones
Diseño de estación con Arduino y raspberry pi con sensores tipo PCE FWS-20
jmviper:
Yo lo tengo cada minuto en los diversos programas para crear los logs. No sé si habrá algún criterio al respecto.
Para tomar datos en el loop infinito en el segundo 0 de cada minuto se puede poner también time.sleep(60 - time.time() % 60)
mielmari:
Gracias, jmviper
Paso a otro tema.
Ejecutar el programa python en segundo plano como un proceso
Hay varias formas de ejecutar en segundo plano una aplicación python. Llámese proceso, daemon (demonio), no llego a las pequeñas diferencias entre esos coceptos.
A mí me va muy bien un método sencillo, que consiste en editar "rc.local". Desde la consola ejecuto
sudo gedit /etc/rc.local (yo uso 'gedit' como editor, habría que poner el editor que use cada uno)
y añadir esta línea:
sudo python3 /home/pi/eguraldi/eguraldi.py &
La dirección completa y el nombre del script. Es importante añadir ese ampersand ('&') al final de la línea, le indica al sistema que es un proceso en segundo plano.
Luego hay que hacer:
reboot
Al encender la Raspberry el programa se carga automáticamente y empieza a ejecutarse. Cada vez que se cambia algo del script, hay que volver a hacer "reboot"
P.D. Debo confesar que todavía estoy probando en Linux Mint 18, la RPI creo que llegará esta semana ...
mielmari:
Pregunta de 'bricolaje': tengo pensado en poner la RPI y el arduino en el exterior dentro de una caja estanca de las que se usan para conexiones eléctricas en intemperie. MI duda es ¿se producirá alguna condensación debido al calor que producen los chips? Si alguien tenéis experiencia en este punto, agradecería compartir. También iría en ella el alimentador 220V AC -5V DC.
B.Santiago:
Si temes que eso llegue a ocurrir, pon dentro uno o dos sobrecillos de desecante, silicagel.
mielmari:
Hola,
Detectar auomáticamente el puerto Arduino
Otro asuntillo que he tenido que solucionar ha sido el de detectar el puerto USB de Arduino. Porque a veces era el "ttyUSB0", otras veces "ttyUSB1", "ttyUSB2"... (esto en el caso de Linux Mint, tal vez cambie algo en RPI, lo comentaré cuando lo pruebe)
Se utiliza una función para detectar el puerto (encontrada por la red):
--- Código: ---def findArduinoUnoPort():
portList = list(serial.tools.list_ports.comports())
for port in portList:
if "ttyUSB" in port[0] or "ttyUSB" in port[1] or "ttyUSB" in port[2]:
print("\n")
print(port)
#print(port[0])
#print(port[1])
#print(port[2])
#please note: it is not sure [0]
#returned port[] is no particular order
#so, may be [1], [2]
return port[0]
def doAtExit():
if arduinoPort.isOpen():
arduinoPort.close()
#print("Close serial")
#print("arduinoPort.isOpen() = " + str(arduinoPort.isOpen()))
--- Fin del código ---
El programa principal llama a esa función, y si el puerto se abre, sigue la ejecución:
--- Código: --- if resto == 0 and ahora.second == 0:
#buscar puerto Arduino tal como '/dev/ttyUSB1'
atexit.register(doAtExit)
unoPort = findArduinoUnoPort()
while not unoPort:
print("\nNo Arduino Uno found")
unoPort = findArduinoUnoPort()
time.sleep(5)
arduinoPort = serial.Serial(unoPort, 9600, timeout=1)
if arduinoPort.isOpen():
try:
--- Fin del código ---
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa