MQTT - pierwsze kroki

SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Uruchomiłem ten szkic:

Code: Select all

/*
 * uMQTTBroker demo for Arduino (C++-style)
 * 
 * The program defines a custom broker class with callbacks, 
 * starts it, subscribes locally to anything, and publishs a topic every second.
 * Try to connect from a remote client and publish something - the console will show this as well.
 */

#include <ESP8266WiFi.h>
#include "uMQTTBroker.h"

/*
 * Your WiFi config here
 */
char ssid[] = "WWW.Mxxx";     // your network SSID (name)
char pass[] = "xxx"; // your network password
bool WiFiAP = false;      // Do yo want the ESP as AP?

/*
 * Custom broker class with overwritten callback functions
 */
class myMQTTBroker: public uMQTTBroker
{
public:
    virtual bool onConnect(IPAddress addr, uint16_t client_count) {
      Serial.println(addr.toString()+" connected");
      return true;
    }

    virtual void onDisconnect(IPAddress addr, String client_id) {
      Serial.println(addr.toString()+" ("+client_id+") disconnected");
    }

    virtual bool onAuth(String username, String password, String client_id) {
      Serial.println("Username/Password/ClientId: "+username+"/"+password+"/"+client_id);
      return true;
    }
    
    virtual void onData(String topic, const char *data, uint32_t length) {
      char data_str[length+1];
      os_memcpy(data_str, data, length);
      data_str[length] = '\0';
      
      Serial.println("received topic '"+topic+"' with data '"+(String)data_str+"'");
      //printClients();
    }

    // Sample for the usage of the client info methods

    virtual void printClients() {
      for (int i = 0; i < getClientCount(); i++) {
        IPAddress addr;
        String client_id;
         
        getClientAddr(i, addr);
        getClientId(i, client_id);
        Serial.println("Client "+client_id+" on addr: "+addr.toString());
      }
    }
};

myMQTTBroker myBroker;

/*
 * WiFi init stuff
 */
void startWiFiClient()
{
  Serial.println("Connecting to "+(String)ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  
  Serial.println("WiFi connected");
  Serial.println("IP address: " + WiFi.localIP().toString());
}

void startWiFiAP()
{
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, pass);
  Serial.println("AP started");
  Serial.println("IP address: " + WiFi.softAPIP().toString());
}

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println();

  // Start WiFi
  if (WiFiAP)
    startWiFiAP();
  else
    startWiFiClient();

  // Start the broker
  Serial.println("Starting MQTT broker");
  myBroker.init();

/*
 * Subscribe to anything
 */
  myBroker.subscribe("svr73.supla.org");
}

int counter = 0;

void loop()
{
/*
 * Publish the counter value as String
 */
  myBroker.publish("broker/counter", (String)counter++);
   
  // wait a second
  delay(1000);
}
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Subskrybuje się na topici publikowane na brokerze.
Podłącz się kiedy pomocy programu mqtt Explorer do brokera i zobacz sobie jak wyglądają topici oraz dane w nich przesyłane
SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Znalazłem też takie coś w cloud, co mam zrobić z tą wiedzą @klew?
You do not have the required permissions to view the files attached to this post.
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

SOYER wrote: Fri Dec 20, 2024 5:08 pm Znalazłem też takie coś w cloud, co mam zrobić z tą wiedzą @klew?
Zacznij od mqtt Explorer I od jakichkolwiek kilku wstępów do mqtt, które znajdziesz w internecie, aby załapać jak to działa i główne pojęcia.

Bo wpisując rzeczy na chybił trafił tutaj nie zda egzaminu ;)
SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Wiem, że muszę zintegrować tego brokera postawionego na esp z mqtt supli. Wtedy serwer w przypadku jakiegoś eventa będzie mi wysyłał info o nim w formie jsona, którego sam muszę sobie obrobić w.g. własnych chęci. @klew dobrze piszę? Podobnie jest z wysyłaniem do supli, takie esp będzie widziane jako kolejny np. telefon. Muszę też włączyć rejestrację telefonów przy uruchamianiu tego wszystkiego.
Tak ogólnie mam rację?
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

W skrócie: nie ;)

Na ESP potrzebujesz zrobić mqtt client i połączyć się nim do brokera na Twoim serwerze Supli (to co na zdjęciu dałeś).

Połącz się z nim przy pomocy mqtt Explorer I zobacz jak to wygląda.

Supla nie publikuje jsonów.
Nie będziesz widział tego jako telefonu.
SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

klew wrote: Fri Dec 20, 2024 5:29 pm W skrócie: nie ;)

Na ESP potrzebujesz zrobić mqtt client i połączyć się nim do brokera na Twoim serwerze Supli (to co na zdjęciu dałeś).

Połącz się z nim przy pomocy mqtt Explorer I zobacz jak to wygląda.

Supla nie publikuje jsonów.
Nie będziesz widział tego jako telefonu.
Podłączyłem explorera, fajne, wow.
Wszystko na bieżąco....
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Polecasz jakiegoś libsa do tego mqtt clienta?
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

SOYER wrote: Fri Dec 20, 2024 5:38 pm Polecasz jakiegoś libsa do tego mqtt clienta?
Na Arduino nigdy nie używałem. Na esp-idf jest gotowy komponent, który fajnie działa.
SOYER
Posts: 1172
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Coś Ci to mówi:
You do not have the required permissions to view the files attached to this post.
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603

Return to “MQTT”