1+ /* **************************************************
2+ Adafruit MQTT Library PyPortal Adafruit IO SSL/TLS Example
3+
4+ Must use the latest version of nina-fw from:
5+ https://github.com/adafruit/nina-fw
6+
7+ Adafruit PyPortal: https://www.adafruit.com/product/4116
8+
9+ Adafruit invests time and resources providing this open source code,
10+ please support Adafruit and open-source hardware by purchasing
11+ products from Adafruit!
12+
13+ Written by Brent Rubell for Adafruit Industries.
14+ MIT license, all text above must be included in any redistribution
15+ ****************************************************/
16+ #include < WiFiNINA.h>
17+ #include < SPI.h>
18+ #include " Adafruit_MQTT.h"
19+ #include " Adafruit_MQTT_Client.h"
20+
21+ /* ************************ WiFi Access Point *********************************/
22+
23+ #define WLAN_SSID " WLAN_SSID"
24+ #define WLAN_PASS " WLAN_PASSWORD"
25+ int keyIndex = 0 ; // your network key Index number (needed only for WEP)
26+
27+ int status = WL_IDLE_STATUS;
28+ /* ************************ Adafruit.io Setup *********************************/
29+
30+ #define AIO_SERVER " io.adafruit.com"
31+ // Using port 8883 for MQTTS
32+ #define AIO_SERVERPORT 8883
33+ // Adafruit IO Account Configuration
34+ // (to obtain these values, visit https://io.adafruit.com and click on Active Key)
35+ #define AIO_USERNAME " YOUR_ADAFRUIT_IO_USERNAME"
36+ #define AIO_KEY " YOUR_ADAFRUIT_IO_KEY"
37+
38+ /* *********** Global State (you don't need to change this!) ******************/
39+
40+ // WiFiSSLClient for SSL/TLS support
41+ WiFiSSLClient client;
42+
43+ // Setup the MQTT client class by WLAN_PASSing in the WiFi client and MQTT server and login details.
44+ Adafruit_MQTT_Client mqtt (&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
45+ /* ***************************** Feeds ***************************************/
46+
47+ // Setup a feed called 'test' for publishing.
48+ // Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
49+ Adafruit_MQTT_Publish test = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME " /feeds/test" );
50+
51+ /* ************************** Sketch Code ************************************/
52+
53+ void setup ()
54+ {
55+ // Initialize serial and wait for port to open:
56+ Serial.begin (115200 );
57+ while (!Serial)
58+ {
59+ ; // wait for serial port to connect. Needed for native USB port only
60+ }
61+
62+ // check for the WiFi module:
63+ if (WiFi.status () == WL_NO_MODULE)
64+ {
65+ Serial.println (" Communication with WiFi module failed!" );
66+ // don't continue
67+ while (true )
68+ ;
69+ }
70+
71+ String fv = WiFi.firmwareVersion ();
72+ if (fv < " 1.0.0" )
73+ {
74+ Serial.println (" Please upgrade the firmware" );
75+ }
76+
77+ // attempt to connect to WiFi network:
78+ while (status != WL_CONNECTED)
79+ {
80+ Serial.print (" Attempting to connect to WLAN_SSID: " );
81+ Serial.println (WLAN_SSID);
82+ // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
83+ status = WiFi.begin (WLAN_SSID, WLAN_PASS);
84+
85+ // wait 10 seconds for connection:
86+ delay (10000 );
87+ }
88+ Serial.println (" Connected to wifi" );
89+ printWiFiStatus ();
90+ }
91+
92+ uint32_t x = 0 ;
93+
94+ void loop ()
95+ {
96+ // Ensure the connection to the MQTT server is alive (this will make the first
97+ // connection and automatically reconnect when disconnected). See the MQTT_connect
98+ // function definition further below.
99+ MQTT_connect ();
100+
101+ // Now we can publish stuff!
102+ Serial.print (F (" \n Sending val " ));
103+ Serial.print (x);
104+ Serial.print (F (" to test feed..." ));
105+ if (!test.publish (x++))
106+ {
107+ Serial.println (F (" Failed" ));
108+ }
109+ else
110+ {
111+ Serial.println (F (" OK!" ));
112+ }
113+
114+ // wait a couple seconds to avoid rate limit
115+ delay (2000 );
116+ }
117+
118+ // Function to connect and reconnect as necessary to the MQTT server.
119+ // Should be called in the loop function and it will take care if connecting.
120+ void MQTT_connect ()
121+ {
122+ int8_t ret;
123+
124+ // Stop if already connected.
125+ if (mqtt.connected ())
126+ {
127+ return ;
128+ }
129+
130+ Serial.print (" Connecting to MQTT... " );
131+
132+ uint8_t retries = 3 ;
133+ while ((ret = mqtt.connect ()) != 0 )
134+ { // connect will return 0 for connected
135+ Serial.println (mqtt.connectErrorString (ret));
136+ Serial.println (" Retrying MQTT connection in 5 seconds..." );
137+ mqtt.disconnect ();
138+ delay (5000 ); // wait 5 seconds
139+ retries--;
140+ if (retries == 0 )
141+ {
142+ // basically die and wait for WDT to reset me
143+ while (1 )
144+ ;
145+ }
146+ }
147+
148+ Serial.println (" MQTT Connected!" );
149+ }
150+
151+ void printWiFiStatus ()
152+ {
153+ // print the SSID of the network you're attached to:
154+ Serial.print (" SSID: " );
155+ Serial.println (WiFi.SSID ());
156+
157+ // print your board's IP address:
158+ IPAddress ip = WiFi.localIP ();
159+ Serial.print (" IP Address: " );
160+ Serial.println (ip);
161+
162+ // print the received signal strength:
163+ long rssi = WiFi.RSSI ();
164+ Serial.print (" signal strength (RSSI):" );
165+ Serial.print (rssi);
166+ Serial.println (" dBm" );
167+ }
0 commit comments