venerdì 14 aprile 2017

Come godo!! Huzzah power in my hands!

Ho comprato questi Adafruit Huzzah, microcontroller con wifi (sia client WPA2 che accesspoint, basato su ESP8266) a 80 MHz, con alimentazione da batteria 3.7V (e da USB con ricarica) e nove pin GPIO (alcuni dei quali rimappabili in una SPI e una I²C).

A bordo c'è già installato il firmware NodeMCU basato su una versione semplificatissima del linguaggio scripting Lua (per cui non ho neppure bisogno di usarlo in modalità Arduino) con tanto di prompt comandi sulla seriale USB.


L'applicazione-tipo è questa:
  • sempre connesso alla wifi di casa
  • ogni tot secondi legge il valore dei pin
  • invia il risultato su socket del server (in pratica: serve per accedere a quei pin via wifi anziché i soliti bluetooth o porta seriale).
Oltre ai soliti moduli per i sensori più diffusi (lux, umidità, ecc.) le librerie supportano anche features simpatiche (HTTPS client, crittografia SHA256, client MQTT, data/ora da SNTP, client Websocket, stati deep sleep, ecc.; alcune richiedono la ricompilazione del nodemcu) fermo restando il limite di una ventina di kilobytes di RAM; del resto, se deve solo inviare valori ad un server locale o a un broker Mosquitto, gli basta la connessione wifi e il client HTTP, non ha bisogno neppure di conoscere data/ora.

Come tutti i prodotti originali Adafruit è ottimo ma costa un sacco di soldi (attualmente 3600 euro al chilo).

Il buongiorno si vede dal mattino:
  • impostare il terminale seriale a 9600 8N1 sulla porta /dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_0136E32E-if00-port0
  • premere il tastino di reset, compare la scritta: NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4
  • se non è ancora impostato un autoexec (init.lua) comparirà anche la scritta lua: cannot open init.lua
  • al prompt dare i comandi per connettersi e verificare l'indirizzo IP assegnato:
      wifi.setmode(wifi.STATION)
      wifi.sta.config("SSID_del_mio_wifi", "mia_password")
      print(wifi.sta.getip())
  • a questo punto può trasferire dati via internet:
      c = net.createConnection(net.TCP, 0)
      c:on("receive", function(s, c) print(c) end )
      c:connect(80, "www.adafruit.com")
      c:send("GET /testwifi/index.html HTTP/1.1\r\nHost: www.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
  • (cioè: crea una connessione attraverso il wifi, associa un evento in caso di "receive", invia una GET.... e qualche attimo dopo, in caso di "receive" andata a buon fine, arriva la stringa di Adafruit "if you can read this, it's working :)"
  • ovviamente non è necessario accedere al web, si può usare anche un IP fisso su una rete locale wifi.


1 commento:

  1. Nella versione che ho indicato, rispetto alla lista ufficiale il nodemcu comprende solo questi moduli:

    adc
    bit
    cjson
    coap
    file
    gpio
    i2c
    mqtt
    net
    node
    ow
    pwm
    spi
    tmr
    u8g
    uart
    wifi
    ws2812

    RispondiElimina