Stellaris LaunchPad & Energia: Puerto serie - Envió de datos para recepción en Python (Parte 2)


Anteriormente comente que inicie con Python, bueno en este post seguiremos procesando los datos leídos a través del puerto serie, para ello retomaremos los código de la Parte 1, en donde comentábamos que se tenian algunos detalles al recibir el dato, bueno en esta ocasión mostrare como podemos resolver esto.

Código Stellaris:
Para el código hemos usado el mismo que la anterior parte con una pequeña modificación, para este caso he enviado el dato con la instrucción Serial.println ya que esta instrucción incluye al final de su trama una \n\r, lo cual es necesario para indicarle a python que la linea ha terminado.
/*******************************************************************************
*
* Envio de datos al puerto serie para monitoreo en Python
*
*******************************************************************************
* FileName: LM4F_E009.ino
* Processor: EX-LM4F120XL
* Complier: Energia 0101e0017
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Este ejemplo envia un valor tipo Int atraves del puerto serie,
* para ser procesado en Python, ademas de cambiar el estado del
* LED azul
*******************************************************************************
* Rev. Date Comment
* v0.0.0 22/02/2019 Creación del firmware
* v0.0.1 02/03/2019 Se implemento retardos usando millis()
******************************************************************************/
const int pinButton = PUSH1;
const int pinLed = BLUE_LED;
// Variables will change:
int ledState = LOW; // ledState used to set the LED
long previousMillis = 0; // will store last time LED was updated
long interval = 1000; // interval at which to blink (milliseconds)
int buttonState = 0;
int buttonTicks = 0;
int currentButtonState = 0;
int lastButtonState= 0;
int buttonFlag = LOW;
unsigned int send_data = 0;
void setup() {
pinMode(pinButton, INPUT_PULLUP);
pinMode(pinLed, OUTPUT);
Serial.begin(9600);
}
void loop(){
GetInput();
if(buttonFlag == HIGH){
// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW){
ledState = HIGH;
Serial.println(send_data); //When use .readline() in python
send_data ++;
if(send_data == 400) //Limitamos a mandar 400 valores
send_data= 0;
}
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(pinLed, ledState);
}
}
}
void GetInput(void){
// Push Button debounce
if (buttonState != digitalRead(pinButton)){
if (buttonTicks > 20){
buttonState = digitalRead(pinButton);
buttonTicks = 0;
}
else buttonTicks++;
}
else buttonTicks = 0;
// Process the push button
currentButtonState = buttonState;
if (currentButtonState == 0 && lastButtonState == 1){
if (buttonFlag == LOW){
send_data= 0;
buttonFlag = HIGH;
}
else{
buttonFlag = LOW;
digitalWrite(pinLed, LOW);
send_data= 0;
}
}
lastButtonState = currentButtonState;
}
view raw LM4F_E009.ino hosted with ❤ by GitHub
Código Python: 
Para este ejemplo se ha usado readline() el cual devuelve la trama de llegada al puerto serie, el final de esta lo indica la instrucción de linea nueva \n enviado desde la stellaris, como se dijo antes el dato leído esta en tipo byte así que hice uso de la función decode() para pasarlo a ASCII y UTF-8, ademas reste dos caracteres para poder eliminar \r\n y así poder imprimir solo el dato de interés.
"""
*******************************************************************************
*
* Puerto serie - Recepción de datos
*
*******************************************************************************
* FileName: PY_002.py
* Complier: EPython 3.7.1
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Ejemplo de recepcion de datos atravez de un puerto COM
* usando la libreria pySerial.
*******************************************************************************
* Rev. Date Comment
* v0.0.0 22/02/2019 - Creación del firmware
* v0.0.1 14/03/2019 - Se modifico para leer datos en una sola linea
*******************************************************************************
"""
import serial
#Usamos puerto COM4 a 9600 baudios
PORT = 'COM4'
ser = serial.Serial(PORT, 9600)
print("Connected to: " + ser.portstr)
while True:
getSerialValue = ser.readline()
# Byte to Str using decode()
# using ASCII & UTF-8 mapping
outputASCII= getSerialValue.decode('ASCII')
outputUTF8= getSerialValue.decode('UTF-8')
outputASCII = outputASCII[:-2] # Removes last two characters (\r\n)
outputUTF8 = outputUTF8[:-2] # Removes last two characters (\r\n)
print ('UART Data: %s' %getSerialValue)
print ('UART Data: %s' %outputASCII)
print ('UART Data: %s' %outputUTF8)
view raw PY_002.py hosted with ❤ by GitHub
Resultados:
Bueno aquí una captura de pantalla con los datos leídos, podemos ver en el recuadro los tres tipos de datos antes mencionados, también se resolvió lo del dato cuando se tiene dos o mas dígitos:
 

Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.



Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Referencias:

Publicar un comentario

0 Comentarios