error: pll_cal exceeds 2ms!!!


Programando con el ESP8266 , puede ser habitual que compile correctamente nuestra aplicación e incluso luego empiece a funcionar  transmitiendo datos  a  un servidor  distante  , para luego ,al reiniciar el ESp8266  ya no responda .

Si conectamos al salida del puerto serie  del IDE de Arduino   entonces veremos con asombro  el origen del problema : el  error pll_cal exceeds 2ms.

¿Como resolver el problema ?

Este problema se puede resolver reemplazando el archivo libphy.a  en el SDK que viene en  las bibliotecas de Arduino para ESP8266.
A partir de ahora, las bibliotecas Arduino ESP8266 vienen con SDK versión 1.5.3_16_04_18 y por  lo que sea en determinados ESP8266  da  problemas de la índole comentada.

La documentación de la versión del SDK 2.0.0_16_08_10 del sitio web de Espressif  lo explica mejor   y se   puede ver  aquí: http://bbs.espressif.com/viewtopic.php?f=46&t=2451.

Descargue todo el repositorio  que ocupa  unos 4.94MB del siguinte l link :   https://bbs.espressif.com/download/file.php?id=1690

Descomprima el fichero ESP8266_NONOS_SDK_V2.0.0_16_08_10.zip

Solo nos interesa el archivo libphy.a                                                                                                                                                                                                                                                                                                              

Reemplacé el archivo situado en C:\Users\xxxxxxxs\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\lib\libphy.a (152kb) al nuevo descargado  .Por ejemplo si lo ha descargado en descargas estara en  C:\Users\xxxxxxs\Downloads\ESP8266_NONOS_SDK_V2.0.0_16_08_10\ESP8266_NONOS_SDK\lib\libphy.a (149kb)

Recompilé y cargué el código arduino nuevamente y el problema quedara resuelto!

 

Nota: Si el IDE Arduino vuelve a detectar librerías obsoletas para el ESP8266 ignórelo , pues  si se decide  actualizar justo esta  libreria  se expone a repetir el problema nuevamente

 

 

 

 

 

 

Anuncios

Como enviar y recibir mensajes entre su dispositivo y el concentrador de IoT de Azure


Una  vez que tenemos   un   dispositivo compatible con Azure Iot  (  como por ejemplo una Raspberry pi  3 como vimos   , o  desde un ESP8266   como vimos también recientemente  ) , los hemos  configurado  y   hemos  implementado una aplicación de ejemplo para ejecutar en el dispositivo que envié envíe datos que   los sensores recogen a su hub de IoT , puede  que  queramos intentar gestionar la mensajería en la nube del  dispositivo IoT  

Precisamente  en este contexto  surge  iothub-explorer que pone a  nuestra disposición  varios  comandos para  facilitar la gestión de centro de IoT  permitiéndonos   supervisar mensajes de dispositivo a nube y enviar mensajes de dispositivo de nube.

Los mensajes de dispositivo a nube podrían ser datos de sensores de  un dispositivo  que recolecta y envía a su hub de IoT (   como por ejemplo una Raspberry pi  3 como vimos  en este post , o  desde un ESP8266   como vimos recientemente  en este post )   o   bien los mensajes hacia ese  dispositivo de nube  que  podría ser comandos que IoT hub envía al dispositivo como por ejemplo hacer  parpadear un LED conectado a ese dispositivo.

Resumidamente  hay pues dos usos  muy diferentes del explorador de iothub :

  • Para supervisar mensajes de dispositivo a nube.
  • Para enviar mensajes de dispositivo de nube.

Para ello necesitamos haber completado dos fases:

  1. Haber  configurado el dispositivo , configuración completa que cubre los siguientes requisitos:
    • Haber registrado una cuenta de suscripción a Azure ( la gratuita nos sirve) .
    • Haber registrado un centro de Azure IoT ( una vez mas  también existe una modalidad gratuita para probar el  servicio).
    • Una aplicación de cliente que envíe mensajes a su hub de IoT de Azure.
  2. Haber instalado el  explorador de iothub. (Instalar explorer iothub)

Instalación de iothub-explorer

Iothub Explorer es pues una herramienta CLI para administrar las identidades de los dispositivos en su registro de IoT hub, enviar y recibir mensajes y archivos desde sus dispositivos, y monitorear sus operaciones de centros de IoT. Ademas iothub-explorer también permite simular un dispositivo conectado a su hub de IoT.

En post  anteriores  vimos  como con  una Raspberry pi  3 , o  desde un ESP8266    los   configurábamos   e  implementamos sendas aplicaciones para ejecutar en esos dispositivos procesos para enviar datos de telemetria  procedente de sus  sensores a un  hub de IoT en la nube de Azure Iot Edge

Bien, tenemos nuestra aplicación corriendo en el dispositivo de Iot , por lo que necesitamos ahora instalar el  explorador de iothub. Desgraciadamente no esta disponible para ambiente windows , es decir solo lo podemos ejecutar por el momento en equipos con Linux instalado. Ademas esta herramienta requiere la versión 4.x o superior de Node.js para que funcionen todas las características.

Para instalar la última versión de la herramienta iothub-explorer, ejecute el siguiente comando en su entorno de línea de comandos:

npm install -g iothub-explorer

En caso de querer instalar esta utilidad en una Raspberry pi  desde Raspbian, al no estar disponible el comando npm  instalarlo siguiendo estos pasos:

cd ~
git clone https://github.com/azure/iothub-explorer

gitclone

Manejo de iothub-explorer

Una vez isntalada esta utilidad ,puede usar el siguiente comando para obtener ayuda adicional sobre todos los comandos de ihotub-explorer:

$ iothub-explorer help
Usage: iothub-explorer [options] <command> [command-options] [command-args]


  Commands:

    login                           start a session on your IoT hub
    logout                          terminate the current session on your IoT hub
    list                            list the device identities currently in your IoT hub device registry
    create <device-id|device-json>  create a device identity in your IoT hub device registry
    delete <device-id>              delete a device identity from your IoT hub device registry
    get <device-id>                 get a device identity from your IoT hub device registry
    import-devices                  import device identities in bulk: local file -> Azure blob storage -> IoT hub
    export-devices                  export device identities in bulk: IoT hub -> Azure blob storage -> local file
    send <device-id> <message>      send a message to the device (cloud-to-device/C2D)
    monitor-feedback                monitor feedback sent by devices to acknowledge cloud-to-device (C2D) messages
    monitor-events [device-id]      listen to events coming from devices (or one in particular)
    monitor-uploads                 monitor the file upload notifications endpoint
    monitor-ops                     listen to the operations monitoring endpoint of your IoT hub instance
    sas-token <device-id>           generate a SAS Token for the given device
    simulate-device <device-id>     simulate a device with the specified id
    help [cmd]                      display help for [cmd]

  Options:

    -h, --help     output usage information
    -V, --version  output the version number

Cada comando iothub-explorer tiene su propia ayuda ,la cual  se puede ver pasanDdo el argumento -help (ayuda)  al nombre del comando:

$ iothub-explorer help create

  Usage: iothub-explorer create [options] [device-id|device-json]
  
  Create a device identity in your IoT hub device registry, either using the specified device id or JSON description.

  Options:

    -h, --help                       output usage information
    -a, --auto                       create a device with an auto-generated device id
    -cs, --connection-string         show the connection string for the newly created device
    -d, --display <property-filter>  comma-separated list of device properties that should be displayed
    -l, --login <connection-string>  connection string to use to authenticate with your IoT Hub instance
    -k1, --key1 <key>                specify the primary key for newly created device
    -k2, --key2 <key>                specify the secondary key for newly created device
    -r, --raw                        use this flag to return raw JSON instead of pretty-printed output
    -x, --x509                       generate an x509 certificate to authenticate the device
    -dv, --daysValid                 number of days the x509 certificate should be valid for
    -t1, --thumbprint1 <thumbprint>  specify the primary thumbprint of the x509 certificate
    -t2, --thumbprint2 <thumbprint>  specify the secondary thumbprint of the x509 certificate

 

Puede obtener mas  información en  https://github.com/azure/iothub-explorer

Monitor dispositivo a nube mensajes

Para supervisar los mensajes que se envían desde el dispositivo a su hub de IoT, siga estos pasos:

  1. Abra una ventana de consola.
  2. Ejecute el siguiente comando:iothub-explorer monitor-events <device-id> --login "<IoTHubConnectionString>"
  3. Obtener y de su hub de IoT. Asegúrese de que haya terminado el tutorial anterior. O puedes probar a utilizar si tienes, y.<device-id><IoTHubConnectionString>iothub-explorer monitor-events <device-id> --login "HostName=<my-hub>.azure-devices.net;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>"HostNameSharedAccessKeyNameSharedAccessKey

Enviar mensajes de dispositivo de nube

Para enviar un mensaje desde su hub de IoT en el dispositivo, siga estos pasos:

  1. Abra una ventana de consola.
  2. Iniciar una sesión en su hub de IoT ejecutando el siguiente comando:
    Bash Copia
    iothub-explorer login `<IoTHubConnectionString>`
    
  3. Enviar un mensaje a su dispositivo ejecutando el siguiente comando:
    Bash Copia
    iothub-explorer send <device-id> <message>
    

El comando hace parpadear el LED que está conectado a su dispositivo y envía el mensaje al dispositivo.

Nota:No es necesario para el dispositivo envie un comando ack separado a su hub de IoT al recibir el mensaje.

 

Primeros pasos con ESP8266


Node MCU es una plataforma para el desarrollo de proyectos IoT que integra el famoso chip ESP8266, el cual se ha extendido enormemente debido a su facilidad para desarrollar proyectos open source  que pueden ademas  pueden   involucrar el IoT  .

Esta placa  destaca  porque integra capacidades de comunicación via WiFi , conteniendo en su interior  un microprocesador que puede ser programado fácilmente usando el  conocido lenguaje de programación Lua o bien vía Arduino IDE.

Obviamente ante todo no podemos perder de vista su bajisimo precio ( menos de 10€  ) comparados con otras opciones , pues no debemos olvidar  que incluye  el modulo wifi integrado  y un bus GPIO para conectar dispositivos de E/S.
Node MCU es una plataforma de desarrollo permite un prototipado rápido, para una vez satisfechos con el resultado, portar el desarrollo a un sistema final con un chip ESP8266 como pieza central.

A la hora de programar nuevas funciones, si optamos por utilizar Lua, dispondremos de un sistema simple con buena comunidad de usuarios. En cambio programar con el sistema Arduino nos aporta un fantástico IDE y un sinfin de manuales y ejemplos de desarrollo.

Este modulo es Ideal como una solución independiente en lugar de Arduino además de Wi-Fi  integrado siendo fácil de programar a través del IDE de Arduino (como vamos a ver ) , al igual que un Arduino.
Todos los periféricos con bus I2C puede unirse,por ejemplo Pantallas OLED, pantallas LCD, temperatura, presión, sensores de humedad pueden ser conectados en paralelo. También se puede conectar múltiples DS18B20

Sin embargo, sólo hay una entrada analógica y salida y las pantallas táctiles no se pueden conectar con ella.

 

¿Se pregunta cómo empezar a  desarrollar código  con  su económico ESP8266 ?

Los pasos  a seguir   para conectar un ESP8266     son los siguientes:

  •  Instalación del IDE de Arduino .Si aun no lo tiene instalado ,se puede hacer  desde aqui
  • Instalación  del paquete de la placa ESP8266 en Arduino IDE  siguiendo las instrucciones del sitio : https://github.com/esp8266/Arduino

esp

  • Instalación de los controladores USB

Es necesario instalar el controlador USB requerido en su ordenador  para que pueda programar el ESP8266.  Independientemente de la opción de firmware que elijamos, primero necesitamos comunicarnos con la placa de desarrollo ESP-12E utilizando la interfaz USB de la computadora.

El módulo USB a Serial UART incluido en la placa es Silicon Labs ‘CP2012, para lo cual generalmente necesitamos instalar los controladores de puerto COM virtual (VCP) fácilmente disponibles para su sistema operativo específico.Una vez instalado, debemos verificar que el CP2102 sea reconocido por su ordenador

Una vez que el controlador está instalado, podemos conectar el cable USB al puerto USB de la computadora y la placa. Después de hacerlo, deberíamos ver el mensaje: software del controlador del dispositivo instalado correctamente.

Además, podemos verificar manualmente que todo funcione correctamente siguiendo estos pasos:

Abra el Administrador de dispositivos (disponible a través del Panel de control → Sistema y seguridad → Administrador de dispositivos en la sección Sistema)
Debajo de la entrada Puertos (COM & LPT), debe haber un puerto abierto llamado USB-SERIAL CP2102 (COM) donde hay un número típicamente mayor o igual a 3.

Ahora que estamos listos para comunicarnos con nuestro ESP8266 a través del CP2102, podemos explorar algunas de las diferentes opciones de firmware disponibles.

node.png

  • En el IDE de Arduino, vaya al menú de herramientas, seleccionada su placa y elija el  puerto al que está conectado su ESP8266.En el ejemplo  es el COM11

 

puerto.png

  • Ahora  copie el siguiente código  para probar que puede subir y ejecutar código código  en la placa :

 

/*
ESP8266 Led Parapadeante
*/

void setup(){

pinMode(LED_BUILTIN, OUTPUT);// Initializa el  pin de  LED_BUILTIN como salida

}

void loop() {       // la función de bucle se repite una y otra vez para siempre

digitalWrite(LED_BUILTIN, LOW);// encienda el LED 

delay(1000); //Espera de 1 segundo

digitalWrite(LED_BUILTIN, HIGH);//  Apague el LED haciendo que el voltaje sea ALTO

delay(2000); // Espere dos segundos  para dejar apagado  LED 

}

 

El LED azul en el módulo ESP – 01 está conectado a GPIO 1, (que también es el pin TXD, por lo que no podemos usar Serial.print () al mismo tiempo)

Tenga en cuenta que el nivel de voltaje es BAJO  pero en realidad el LED está encendido, porque es bajo en el ESP – 01

En este código se usa  LED_BUILTIN para encontrar el pin con el LED interno  de modo

Como puede apreciar , el código ejecuta un bucle infinito en el que pone el estado bajo  un segundo (encendiendo el led)    para posteriormente forzar a nivel alto  dos segundos(apagando el led  )  y así   indefinidamente gracias al bucle  que se repite indefinidamente

 

Envio de datos a la nube de Cayenne

  • Agregue la biblioteca de Cayenne MQTT a Arduino IDE  desde aqui como un fuchero zip
  • Instale la biblioteca zip descargada en el paso anterior desde Programa -> Incluir biblioteca -> Añadir libreria ZIP. y seleccionar ahora el fichero descargado con anterioridad  Cayenne-MQTT-ESP-master.zip
  • Ya puede crear una cuenta Starter en cayenne ( si aun no la tiene  ya creada)
  • Una vez ya validado vaya a la esquina  superior  izquierda  y pulse sobre el botón verde  add new
addnew.png
  • Ahora seleccione Generic ESP8266  como la placa y  tome nota  ahora  de los siguintes paraetros ofrecidos por la  pagina:
    •  MQTT USERNAME:
    • MQTT PASSWORD:
    • CLIENT ID:
    • MQTT SERVER:
    • MQTT PORT:
    • NAME YOUR DEVICE (optional):
  • Abra el boceto de ejemplo incluido desde Archivo -> Ejemplos -> Cayenne-MQTT-ESP. Modifique el boceto incluido con su información de red y la información de autenticación de Cayenne que recibió al agregar su dispositivo.

Primeros pasos con ESP8266 y Cayenne


Node MCU es una plataforma para el desarrollo de proyectos IoT que integra el famoso chip ESP8266, el cual se ha extendido enormemente debido a su facilidad para desarrollar proyectos open source  a los que indudablemente se une su bajisimo precio comparado con otras opciones.
De este componente destaca  integra capacidades de comunicación via WiFi , conteniendo en su interior  microprocesador que puede ser programado fácilmente usando en conocido lenguaje de programación Lua o vía Arduino IDE.

¿Se pregunta cómo controlar  su económico ESP8266 de forma remota desde cualquier lugar del mundo?

En este post repasaremos precisamente el proceso, paso a paso, de cómo escribir código en el IDE de Arduino y programar su ESP8266 permitiendo  que el código  escrito para  el ESP8266 se comunique con la plataforma myDevices Cayenne (https://cayenne.mydevices.com) la cual nos va  permitir monitorear y controlar el ESP8266 a través de un tablero muy intuitivo.

 

De  Cayenne hemos hablado  en este humilde blog, en muchisimas  ocasiones pero resumidamente es una solución innovadora   para la construcción de aplicaciones IoT  basada en la mayoría de las  plataformas conocidas como son ArduinoRaspberry piESP8266 y dispositivos  SerialesWifi y dispositivos Lora

Ademas   también  incluye una API Mqtt para conectar cualquier cliente MQTT la cual utilizaremos en este caso

Después de configurar una cuenta en Cayenne, utilizamos el Tablero para configurar un cualquier puerto del GPIO al que conectemos una entrada o una salida  . La comunicación entre el ESP8266 y Cayenne se realiza utilizando un protocolo muy ligero llamado MQTT (http://mqtt.org/).

Una vez que todo esté hecho, podemos monitorear y controlar el ESP8266 desde cualquier parte del mundo simplemente accediendo a Cayenne.

Los pasos  a seguir   para conectar un ESP8266   a  la nube de Cayenne  son los siguientes:

  •  Instalación del IDE de Arduino .Si aun no lo tiene instalado ,se puede hacer  desde aqui
  • Instalación  del paquete de la placa ESP8266 en Arduino IDE  siguiendo las instrucciones del sitio : https://github.com/esp8266/Arduino

esp

  • Instalación de los controladores USB

Es necesario instalar el controlador USB requerido en su ordenador  para que pueda programar el ESP8266.  Independientemente de la opción de firmware que elijamos, primero necesitamos comunicarnos con la placa de desarrollo ESP-12E utilizando la interfaz USB de la computadora.

El módulo USB a Serial UART incluido en la placa es Silicon Labs ‘CP2012, para lo cual generalmente necesitamos instalar los controladores de puerto COM virtual (VCP) fácilmente disponibles para su sistema operativo específico.Una vez instalado, debemos verificar que el CP2102 sea reconocido por su ordenador

Una vez que el controlador está instalado, podemos conectar el cable USB al puerto USB de la computadora y la placa. Después de hacerlo, deberíamos ver el mensaje: software del controlador del dispositivo instalado correctamente.

Además, podemos verificar manualmente que todo funcione correctamente siguiendo estos pasos:

Abra el Administrador de dispositivos (disponible a través del Panel de control → Sistema y seguridad → Administrador de dispositivos en la sección Sistema)
Debajo de la entrada Puertos (COM & LPT), debe haber un puerto abierto llamado USB-SERIAL CP2102 (COM) donde hay un número típicamente mayor o igual a 3.

Ahora que estamos listos para comunicarnos con nuestro ESP8266 a través del CP2102, podemos explorar algunas de las diferentes opciones de firmware disponibles.

  • Agregue la biblioteca de Cayenne MQTT a Arduino IDE  desde aqui como un fuchero zip
  • Instale la biblioteca zip descargada en el paso anterior desde Programa -> Incluir biblioteca -> Añadi libreria ZIP. y selecionar ahorael fichero descargado con anterioridad  Cayenne-MQTT-ESP-master.zip
  • Conecte el ESP8266 a su PC / Mac a través de un cable USB con capacidad de datos.
  • En el IDE de Arduino, vaya al menú de herramientas, seleccione su placa y el puerto al que está conectado su ESP8266.
  • Ya puede crear una cuenta Starter en cayenne ( si aun no la tiene  ya creada)
  • Una vez ya validado vaya a la esquina  superior  izquierda  y pulse sobre el botón verde  add new
addnew.png
  • Ahora seleccione Generic ESP8266  como la placa y  tome nota  ahora  de los siguintes paraetros ofrecidos por la  pagina:
    •  MQTT USERNAME:
    • MQTT PASSWORD:
    • CLIENT ID:
    • MQTT SERVER:
    • MQTT PORT:
    • NAME YOUR DEVICE (optional):
  • Abra el boceto de ejemplo incluido desde Archivo -> Ejemplos -> Cayenne-MQTT-ESP. Modifique el boceto incluido con su información de red y la información de autenticación de Cayenne que recibió al agregar su dispositivo.
.// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data
.// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling.
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// WiFi network info.
char ssid[] = “ssid”;
char wifiPassword[] = “wifiPassword”;
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard
char username[] = “MQTT_USERNAME”;
char password[] = “MQTT_PASSWORD”;
char clientID[] = “CLIENT_ID”;
unsigned long lastMillis = 0;
void setup()
{ serial.begin(9600);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
void loop()
{
Cayenne.loop();
//Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
if (millis() – lastMillis > 10000)
{ lastMillis = millis();
//Write data to Cayenne here. This example just sends the current uptime in milliseconds.
Cayenne.virtualWrite(0, lastMillis);
//Some examples of other functions you can use to send data.
//Cayenne.celsiusWrite(1, 22.0);
//Cayenne.luxWrite(2, 700);
//Cayenne.virtualWrite(3, 50, TYPE_PROXIMITY, UNIT_CENTIMETER);
}
}
//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
CAYENNE_IN_DEFAULT()
{ CAYENNE_LOG(“CAYENNE_IN_DEFAULT(%u) – %s, %s”, request.channel, getValue.getId(), getValue.asString());
//Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError(“Error message”);
}
  • Compile y sube el programa  a su dispositivo. La carga puede requerir configurar el dispositivo en modo de carga de arranque. Para el módulo Adafruit HUZZAH ESP8266, esto se hace siguiendo los siguientes pasos:
    • Mantenga presionado el botón GPIO0.
    • Haga clic en el botón Restablecer.
    • Suelta el botón GPIO0.
    • El LED rojo debería encenderse, lo que indica que el dispositivo está listo para cargar.
    • Cargue su boceto.
    • Compruebe el tablero de Cayenne para asegurarse de que está recibiendo datos de muestra de su dispositivo.

 

Hay mas ejemplos desde el  interfaz de Arduino   en  File → Examples → Cayenne-MQTT-ESP8266 → ESP8266