UART na MQTT bridge z ESP8266 / nodemcu

Vse v zvezi z vašimi samogradnjami, popravili, idejami,....

Moderator: S53AL

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a mirkatmir » 29 Sep 2015, 07:55

Sem se samo malo igral z primeri, ki jih najdeš na netu - priklop temp. senzorja in gledanje grafa na webu. Sem pa nastavil eno zadevo z namenom, da preko WiFi-ja resetiram drugi ruter, ki se mi vsake toliko časa zacikla. Ruter je v drugem prostoru pri kolegu, do katerega zvečer ali čez vikend nimam vedno takoj dostopa.
lp, Miran (Miro S51SK)
Uporabniški avatar
mirkatmir
 
Prispevkov: 1110
Pridružen: 14 Jan 2015, 22:05
Kraj: Ribnica - JN75IR
Zahvalil se je: 140 krat
Prejel zahvalo: 204 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 27

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Kroko » 29 Sep 2015, 08:25

Ali bi lahko ESP8266 priklopil na napravo, ki ima samo TX in nič ne sprejema? Glede na diagrame se RX uporabi pri inicializaciji ampak mogoče lahko to izpustim?
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4374
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 635 krat
Prejel zahvalo: 1423 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 29 Sep 2015, 08:43

Kroko je napisal/-a:Ali bi lahko ESP8266 priklopil na napravo, ki ima samo TX in nič ne sprejema? Glede na diagrame se RX uporabi pri inicializaciji ampak mogoče lahko to izpustim?


Predvidevam, da si gledal tole https://github.com/mrizvic/nodemcu-uart2mqtt
Ce ustrezno popravis init.lua ( https://github.com/mrizvic/nodemcu-uart ... r/init.lua ) lahko inicializacijo spustis. V tem primeru lahko spustis RX vendar v tem primeru izgubis funkcionalnost , ko ESP8266 z 0xf0 bitom vprasas po vrednosti STATUS_REGISTER v katerem se nahajajo informacije o tem ali je WiFi vzpostavljen, ali je zveza z MQTT vzpostavljena itd.

Sicer imam pa zase taksno kodo, da mi ni potrebno vsakic znova vpisovati SSID ter wifipassworda.
Iz kode sem odstranil posiljanje keepalive sporocil, MQTT LWT sporocilo in sporocanje prisotnosti ter odzivanje na 'ping' na dolocenih topicih.
Taksna koda je v priponki.
Priponke
uart2mqtt-WIFI-hardcoded.zip
(1.11 KiB) Prenešeno 48 krat
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Kroko » 29 Sep 2015, 08:58

Sam nabavil par modulov. Ideja je, da bi CNC kontroler pošiljal svojo "telemetrijo".
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4374
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 635 krat
Prejel zahvalo: 1423 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 01 Okt 2015, 23:23

Vse to se da z MQTT , na stacionarnem kolesu je pa se ESP8266.
Priponke
povezana_hisa.jpg
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 02 Okt 2015, 21:21

Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 05 Okt 2015, 22:20

Nekaj takega imam v omarici z varovalkami. S to razliko, da namesto esp8266 uporablja raspberry pi, atmelov cip je pa 90E36.
Za prenos podatkov iz naprave v bazo ter brskalnik uporabljam MQTT.
Priponke
powerconsumption.png
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Bojan » 01 Nov 2015, 10:35

Danes sem želel pogledati posnetek do konca "o predavanja ESP8266" pa ga ni več. (Request Not Processed)
Vsaj na tem linku. https://vox.arnes.si/p4j21borlel/
Ali kdo ve, kje bi se ga dalo dobiti? Kakšen nov link?
Bojan
 
Prispevkov: 10
Pridružen: 17 Apr 2015, 12:41
Zahvalil se je: 2 krat
Prejel zahvalo: 0 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 0

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a VolkD » 01 Nov 2015, 11:00

Bojan je napisal/-a:Danes sem želel pogledati posnetek do konca "o predavanja ESP8266" pa ga ni več. (Request Not Processed)
Vsaj na tem linku. https://vox.arnes.si/p4j21borlel/
Ali kdo ve, kje bi se ga dalo dobiti? Kakšen nov link?
Tudi meni ne deluje. Kot je videti imajo na Arnes neke težave. Bomo videli kako bo med tednom.
Tudi prijava na VOX z geslom in Uname za društvo ne gre.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 34813
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 6940 krat
Prejel zahvalo: 4294 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Bojan » 03 Dec 2015, 20:03

Link zdaj dela normalno.
Zadeva je zelo poučna sploh pa koristna, zato najprej zahtava avtorju "sundancer"
ESP8266 sem testiral oziroma MQTT. Zelo koristno...

Zanima me ali je možno pošiljati več podatkov naenkrat oziroma kasneje parsat npr na OPENHUB? Ali si to kaj testiral?
Rad bi v enem samem TXu posla npr vlago, temp in še I/O signale. Ali je sploh smiselno?

Kako ti to pošiljaš in daješ podatke na graf? Imaš kakšne primere oziroma HOW TO?
Bojan
 
Prispevkov: 10
Pridružen: 17 Apr 2015, 12:41
Zahvalil se je: 2 krat
Prejel zahvalo: 0 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 0

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 03 Dec 2015, 21:48

Bojan je napisal/-a:Zanima me ali je možno pošiljati več podatkov naenkrat oziroma kasneje parsat npr na OPENHUB? Ali si to kaj testiral?

Openhab nisem testiral. Vem pa, da podpira MQTT.

Bojan je napisal/-a:Rad bi v enem samem TXu posla npr vlago, temp in še I/O signale. Ali je sploh smiselno?

Nisi napisal na kaksen nacin posiljas podatke. Ali si uporabil kodo, ki je na githubu? Ce si potem napisi se kako imas povezano vse skupaj.


Bojan je napisal/-a:Kako ti to pošiljaš in daješ podatke na graf? Imaš kakšne primere oziroma HOW TO?

Za risanje grafa v brskalniku uporabljam http://dygraphs.com/ ter paho mqtt javascript knjiznico https://eclipse.org/paho/clients/js/
Poglej si kodo na http://repo.dmz6.net/mqttexample/index.html in za svoj primer popravi spremenljivke:
Koda: Izberi vse
      var mqttSrv='192.168.168.168';
      var mqttPort=80;
      var mqttSubTopic='airquality/senzor1';

Pomembno je to, da ima tvoj MQTT streznik websocket listener, saj se javascript knjiznica v brskalniku povezuje na websocket in ne na navaden socket. Port na katerega si nastavil websocket listener mora biti nastavljen tudi v spremenljivki mqttPort (v mojem primeru je to 80). mqttSrv je pa IP od MQTT streznika. Na topic, ki ga bos nastavil v mqttSubTopic posiljaj le stevilcne vrednosti saj se v nasprotnem primeru graf ne bo izrisoval, ce bos posiljal crke ali druge znake.
Ce uporabljas mosquitto poglej v config datoteki kako se to nastavi.

LP, Marko
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Bojan » 04 Dec 2015, 13:47

Hvala za info.
Problem je moj čas..., kot pri vsakemu, ki se za hobi ukvarja s tem.
Rad bi pripravil nekaj kar je podobno "pametni hiši" kot celotno upravljanje. Potrebujem nek protokol in na koncu
SW ki se ga da na nek (easy) način narediti. MQTT se mi zdi zelo dobra zadeva.
Vse kar sem delal do sedaj gre preko WEBa HTML

Podatke sem mislil pošiljati kot npr. 22.4,55.6,33.3 in ne samo 22.4
Zaenkrat sem vse podatke pošiljal direktno iz ESPja brez ATMEGA. Ob priliki testiram tudi tvoj SW, ker se mi zdi zelo uporabna stvar. Jaz delam v BASCOMU in ne z ARDUINOTOM.
Sicer pa ni pomembno v čem je napisano samo da dela :)
Ali si https://s5tech.net/download/file.php?id=10954&mode=view to tudi naredil na enak način kot je opisano zgoraj?

Bojan
Bojan
 
Prispevkov: 10
Pridružen: 17 Apr 2015, 12:41
Zahvalil se je: 2 krat
Prejel zahvalo: 0 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 0

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 04 Dec 2015, 14:00

Bojan je napisal/-a:Ali si https://s5tech.net/download/file.php?id=10954&mode=view to tudi naredil na enak način kot je opisano zgoraj?


Za to sem uporabil http://freeboard.io/

Vsebina mqtt sporocil je poljubna vendar je potrebno potem na prejemnikovi strani vedeti kako posiljatelj sestavi vsebino ter temu primerno parsati. V tvojem primeru je treba stevila 'razrezati' med vejicami, da dobis vrednosti za posamezen parameter. To naredis v brskalniku z javascriptom http://www.w3schools.com/jsref/jsref_split.asp
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a Bojan » 04 Dec 2015, 14:14

Za to sem uporabil http://freeboard.io/

Ali lahko prilepiš sample (tvojo kodo) za to stran. Lažje je začeti :)
Bojan
 
Prispevkov: 10
Pridružen: 17 Apr 2015, 12:41
Zahvalil se je: 2 krat
Prejel zahvalo: 0 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 0

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a sundancer » 04 Dec 2015, 17:45

Bojan je napisal/-a:
Za to sem uporabil http://freeboard.io/

Ali lahko prilepiš sample (tvojo kodo) za to stran. Lažje je začeti :)


Na freeboardu ne uporabljam MQTTja pac pa vrednosti pobiram prek HTTP API vmesnika, ki sem ga spisal v node.js
Koda je dostopna na https://github.com/mrizvic/js-qddb

Kode ubistvu ni. Ko instaliras freeboard moras potem elemente skonfigurirati prek brskalnika in ko to naredis dobis ven neko konfiguracijsko datoteko.
Tako ti ni potrebno nicesar programirati.
Uporabniški avatar
sundancer
 
Prispevkov: 504
Pridružen: 16 Jan 2015, 23:36
Kraj: Domžale
Zahvalil se je: 176 krat
Prejel zahvalo: 253 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 36

Re: UART na MQTT bridge z ESP8266 / nodemcu

OdgovorNapisal/-a kekec » 07 Mar 2016, 21:56

Zdravo!

Tudi sam sem se odločil, da pozkusim sprogramirati ESP8266-01 modul, da mi bo služil kot bridge med UART in mqtt brokerjem. Imam pa sledeč probelm:
Na mikrokrmilnik Teensy imam na A0 vhod povezan senzor. Analogne vrednosti pošljem na Serial in Serial1 na katerega imam povezan ESP8266 modul. Na ESP8266 oz. broker dobim vrednosti, ki pa niso enake tistim v serial monitorju (Serial). Predvidevam, da je napaka v branju podatkov, ki jih pošlje Teensy preko Serial1 na ESP8266.

Prosim za pomoč in morda kakšen komentar ali sem se zadeve sploh pravilno lotil.

Hvala!

Teensy koda:
Koda: Izberi vse
void setup() {

    // Setup computer to Arduino serial
    Serial.begin(115200);

    // Setup Arduino to ESP8266 serial
    // Use baud rate 115200 during firmware update
    Serial1.begin(115200);

}

void loop() {

    int sensorValue = analogRead(A0);
    Serial.println(sensorValue);
    //Send bytes from computer back to ESP8266
    Serial1.write(sensorValue);
    delay(1000);

}


Esp 8266 koda (Adafruit mqtt example)
Koda: Izberi vse
/***************************************************
  Adafruit MQTT Library ESP8266 Example

  Must use ESP8266 Arduino from:
    https://github.com/esp8266/Arduino

  Works great with Adafruit's Huzzah ESP board & Feather
  ----> https://www.adafruit.com/product/2471
  ----> https://www.adafruit.com/products/2821

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Tony DiCola for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/

#define WLAN_SSID       "SSID"
#define WLAN_PASS       "pass"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "192.168.0.101"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "channelID"
#define AIO_KEY         "...your AIO key..."

/************ Global State (you don't need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Store the MQTT server, username, and password in flash memory.
// This is required for using the Adafruit MQTT library.
const char MQTT_SERVER[] PROGMEM    = AIO_SERVER;
const char MQTT_USERNAME[] PROGMEM  = AIO_USERNAME;
const char MQTT_PASSWORD[] PROGMEM  = AIO_KEY;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD);

/****************************** Feeds ***************************************/

// Setup a feed called 'photocell' for publishing.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
const char PHOTOCELL_FEED[] PROGMEM = AIO_USERNAME "/feeds/home";
Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, PHOTOCELL_FEED);

/*************************** Sketch Code ************************************/

// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
// for some reason (only affects ESP8266, likely an arduino-builder bug).
void MQTT_connect();

void setup() {
  Serial.begin(115200);
  delay(10);

  Serial.println(F("Adafruit MQTT demo"));

  // Connect to WiFi access point.
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: "); Serial.println(WiFi.localIP());

}
uint32_t x=0;

void loop() {
  // Ensure the connection to the MQTT server is alive (this will make the first
  // connection and automatically reconnect when disconnected).  See the MQTT_connect
  // function definition further below.
  MQTT_connect();

  // this is our 'wait for incoming subscription packets' busy subloop
  // try to spend your time here

// Now we can publish stuff!
  if (Serial.available()) {
             // read the incoming byte:
                 x = char(Serial.read());

                 Serial.print("I received: ");
                 Serial.println(x, DEC);
                 if (! photocell.publish(x)) {
                  Serial.println(F("Failed"));
                 } else {
                  Serial.println(F("OK!"));
       }
 }
  // ping the server to keep the mqtt connection alive
  // NOT required if you are publishing once every KEEPALIVE seconds
  /*
  if(! mqtt.ping()) {
    mqtt.disconnect();
  }
  */
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Retrying MQTT connection in 5 seconds...");
       mqtt.disconnect();
       delay(5000);  // wait 5 seconds
       retries--;
       if (retries == 0) {
         // basically die and wait for WDT to reset me
         while (1);
       }
  }
  Serial.println("MQTT Connected!");
}


Izvleček iz ESP8266 kode, kjer sumim da je težava:
Koda: Izberi vse
  if (Serial.available()) {
             // read the incoming byte:
                x = char(Serial.read());

                 Serial.print("I received: ");
                 Serial.println(x, DEC);
                 if (! photocell.publish(x)) {
                  Serial.println(F("Failed"));
                 } else {
                  Serial.println(F("OK!"));
                 }
 }
kekec
 
Prispevkov: 2
Pridružen: 07 Mar 2016, 19:44
Zahvalil se je: 0 krat
Prejel zahvalo: 0 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 0

Prejšnja

Vrni se na Pametne hiše

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost