You've already forked Adafruit_MQTT_Library
							
							
				mirror of
				https://github.com/adafruit/Adafruit_MQTT_Library.git
				synced 2025-11-03 11:53:11 +03:00 
			
		
		
		
	add PyPortal MQTTS Example
This commit is contained in:
		@@ -0,0 +1,167 @@
 | 
				
			|||||||
 | 
					/***************************************************
 | 
				
			||||||
 | 
					  Adafruit MQTT Library PyPortal Adafruit IO SSL/TLS Example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Must use the latest version of nina-fw from:
 | 
				
			||||||
 | 
					    https://github.com/adafruit/nina-fw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Adafruit PyPortal: https://www.adafruit.com/product/4116
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Adafruit invests time and resources providing this open source code,
 | 
				
			||||||
 | 
					  please support Adafruit and open-source hardware by purchasing
 | 
				
			||||||
 | 
					  products from Adafruit!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Written by Brent Rubell for Adafruit Industries.
 | 
				
			||||||
 | 
					  MIT license, all text above must be included in any redistribution
 | 
				
			||||||
 | 
					 ****************************************************/
 | 
				
			||||||
 | 
					#include <WiFiNINA.h>
 | 
				
			||||||
 | 
					#include <SPI.h>
 | 
				
			||||||
 | 
					#include "Adafruit_MQTT.h"
 | 
				
			||||||
 | 
					#include "Adafruit_MQTT_Client.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/************************* WiFi Access Point *********************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define WLAN_SSID "WLAN_SSID"
 | 
				
			||||||
 | 
					#define WLAN_PASS "WLAN_PASSWORD"
 | 
				
			||||||
 | 
					int keyIndex = 0; // your network key Index number (needed only for WEP)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int status = WL_IDLE_STATUS;
 | 
				
			||||||
 | 
					/************************* Adafruit.io Setup *********************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AIO_SERVER "io.adafruit.com"
 | 
				
			||||||
 | 
					// Using port 8883 for MQTTS
 | 
				
			||||||
 | 
					#define AIO_SERVERPORT 8883
 | 
				
			||||||
 | 
					// Adafruit IO Account Configuration
 | 
				
			||||||
 | 
					// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
 | 
				
			||||||
 | 
					#define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
 | 
				
			||||||
 | 
					#define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/************ Global State (you don't need to change this!) ******************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WiFiSSLClient for SSL/TLS support
 | 
				
			||||||
 | 
					WiFiSSLClient client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Setup the MQTT client class by WLAN_PASSing in the WiFi client and MQTT server and login details.
 | 
				
			||||||
 | 
					Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 | 
				
			||||||
 | 
					/****************************** Feeds ***************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Setup a feed called 'test' for publishing.
 | 
				
			||||||
 | 
					// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
 | 
				
			||||||
 | 
					Adafruit_MQTT_Publish test = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/test");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*************************** Sketch Code ************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void setup()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  //Initialize serial and wait for port to open:
 | 
				
			||||||
 | 
					  Serial.begin(115200);
 | 
				
			||||||
 | 
					  while (!Serial)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ; // wait for serial port to connect. Needed for native USB port only
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // check for the WiFi module:
 | 
				
			||||||
 | 
					  if (WiFi.status() == WL_NO_MODULE)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.println("Communication with WiFi module failed!");
 | 
				
			||||||
 | 
					    // don't continue
 | 
				
			||||||
 | 
					    while (true)
 | 
				
			||||||
 | 
					      ;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String fv = WiFi.firmwareVersion();
 | 
				
			||||||
 | 
					  if (fv < "1.0.0")
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.println("Please upgrade the firmware");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // attempt to connect to WiFi network:
 | 
				
			||||||
 | 
					  while (status != WL_CONNECTED)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.print("Attempting to connect to WLAN_SSID: ");
 | 
				
			||||||
 | 
					    Serial.println(WLAN_SSID);
 | 
				
			||||||
 | 
					    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
 | 
				
			||||||
 | 
					    status = WiFi.begin(WLAN_SSID, WLAN_PASS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // wait 10 seconds for connection:
 | 
				
			||||||
 | 
					    delay(10000);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  Serial.println("Connected to wifi");
 | 
				
			||||||
 | 
					  printWiFiStatus();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Now we can publish stuff!
 | 
				
			||||||
 | 
					  Serial.print(F("\nSending val "));
 | 
				
			||||||
 | 
					  Serial.print(x);
 | 
				
			||||||
 | 
					  Serial.print(F(" to test feed..."));
 | 
				
			||||||
 | 
					  if (!test.publish(x++))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.println(F("Failed"));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.println(F("OK!"));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // wait a couple seconds to avoid rate limit
 | 
				
			||||||
 | 
					  delay(2000);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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!");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void printWiFiStatus()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // print the SSID of the network you're attached to:
 | 
				
			||||||
 | 
					  Serial.print("SSID: ");
 | 
				
			||||||
 | 
					  Serial.println(WiFi.SSID());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // print your board's IP address:
 | 
				
			||||||
 | 
					  IPAddress ip = WiFi.localIP();
 | 
				
			||||||
 | 
					  Serial.print("IP Address: ");
 | 
				
			||||||
 | 
					  Serial.println(ip);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // print the received signal strength:
 | 
				
			||||||
 | 
					  long rssi = WiFi.RSSI();
 | 
				
			||||||
 | 
					  Serial.print("signal strength (RSSI):");
 | 
				
			||||||
 | 
					  Serial.print(rssi);
 | 
				
			||||||
 | 
					  Serial.println(" dBm");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user