// RPI PICO W test MQTT TLS #include // select only ONE //#define useREMOTE_BROKER_HIVEMQ #define useLOCAL_BROKER #ifdef useREMOTE_BROKER_HIVEMQ #define MQTT_HOST "" // OK #define MQTT_SECURE true #define MQTT_PORT 8883 #define useCREDETIALS true #define MQTT_user "" #define MQTT_pass "" #endif // __________________________________________________________________ LOCAL NO TLS #ifdef useLOCAL_BROKER #define MQTT_HOST "192.168.1.104" // OK #define MQTT_SECURE false #define MQTT_PORT 1883 #define useCREDETIALS true #define MQTT_user "uPICOW" #define MQTT_pass "pPICOW" #endif #define MQTT_topic "PICOW/data" #define MQTT_stopic "PICOW/set" #include // old most easy mqtt lib #if MQTT_SECURE #include WiFiClientSecure wifiClient; #else #include WiFiClient wifiClient; #endif PubSubClient mqttclient(wifiClient); #define STASSID "" #define STAPSK "" #define FIXIP {192,168,1,215} IPAddress thisip(FIXIP); // _________________________________________ fix IP for webserver IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 0, 0); IPAddress primaryDNS(8, 8, 8, 8); //optional IPAddress secondaryDNS(8, 8, 4, 4); //optional const char *ssid = STASSID; const char *password = STAPSK; const char *mqtt_broker = MQTT_HOST; // _____________________________ MQTT IP broker const int mqtt_port = MQTT_PORT; const char *mqtt_user = MQTT_user; const char *mqtt_pass = MQTT_pass; const char *mqtt_topic = MQTT_topic; const char *mqtt_stopic = MQTT_stopic; bool MQTT_OK = false; // change because i not want to get it stuck if no broker online BUT now, if start broker later, must reset board void mqtt_connect() { MQTT_OK = false; if ( !MQTT_OK ) { String client_id = "pico-w"; Serial.print("The client :"); Serial.println(client_id); #if MQTT_SECURE wifiClient.setInsecure(); #endif Serial.println("try connect"); if (mqttclient.connect(client_id.c_str(), mqtt_user, mqtt_pass)) { Serial.print("MQTT broker: "); Serial.print(mqtt_broker); Serial.print(" to topic: "); Serial.print(mqtt_topic); Serial.println(" connected"); MQTT_OK = true; Serial.print("subscribe to: "); Serial.println(mqtt_stopic); mqttclient.subscribe(mqtt_stopic); } else { Serial.print("MQTT connect failed "); } } } void setup_MQTT() { Serial.println("mqtt setup_MQTT"); #if MQTT_SECURE wifiClient.setInsecure(); // not check server cert #endif mqttclient.setServer(MQTT_HOST, MQTT_PORT); mqttclient.setCallback(callback); mqttclient.setKeepAlive(100); // default 10 mqtt_connect(); if ( MQTT_OK ) { // _______________________________________________ Publish after connect Serial.println("publish: I'm a PICO W ! "); mqttclient.publish(MQTT_topic, "I'm a PICO W ! "); } } void callback(char *atopic, byte *apayload, unsigned int plength) { // already filtered Serial.print("\nmqtt Message arrived in topic: "); Serial.print(atopic); Serial.print(" :"); for (int i = 0; i < int(plength); i++) { Serial.print((char) apayload[i]); } Serial.println(); } void setup_WIFI(){ WiFi.mode(WIFI_STA); WiFi.config(thisip); //, gateway, subnet, primaryDNS, secondaryDNS); WiFi.begin(ssid, password); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("www Connected to "); Serial.println(ssid); Serial.print("www IP address: "); Serial.println(WiFi.localIP()); } void setup(void) { delay(500); Serial.begin(115200); // __________________________________________ talk to serial delay(500); Serial.println(); setup_WIFI(); setup_MQTT(); } void loop(void) { mqttclient.loop(); delay(10); // <- fixes some issues with WiFi stability if (!mqttclient.connected()) { mqtt_connect(); } }