Étape 4: Configuration du logiciel - Arduino avec WiFi bouclier
Cette étape peut ou peut ne pas vous concerner, cela dépend vraiment sur ce que le matériel que vous avez. La carte Arduino ou clone devrait accepter n’importe quel code de l’Arduino avec que vous programmer, mais le bouclier WiFi vous avez mai ne fonctionne ne pas avec le code, je m’apprête à vous montrer. J’ai un Linksprite CC3000. La plupart CC3000 sont codées de la même façon, il suffit de trouver les bibliothèques qui travaillent avec elle et ajuster les choses dans le code principal pour le faire fonctionner. Avec le Linksprite, j’ai trouvé que la bibliothèque Adafruit CC3000 fonctionne parfaitement avec mon bouclier et il se trouve que Adafruit IO est la même société.
TL; DR: WiFi votre bouclier peut devoir être codé différemment et peut nécessiter plus d’effort de votre part.
Voici le code que j’ai utilisé :
#include « Adafruit_SleepyDog.h » #include « Adafruit_CC3000.h » #include « SPI.h » #include « utility/debug.h » #include « Adafruit_MQTT.h » #include "Adafruit_MQTT_CC3000.h" < /p >< p > int photocellPin = 0 ; la cellule et le 10K pulldown sont connectés à a0 < /p >< p > / *** CC3000 Pins *** / < /p >< p > #define ADAFRUIT_CC3000_IRQ 3 / / doit être une tige d’interruption ! #define ADAFRUIT_CC3000_VBAT 5 / / VBAT & CS peuvent être n’importe quel broches numériques. #define ADAFRUIT_CC3000_CS 10 / / utiliser le matériel SPI pour les broches restantes / / sur un UNO, SCK = 13, MISO = 12 et MOSI = 11 < /p >< p > / *** Point d’accès WiFi *** / < /p >< p > #define WLAN_SSID "---votre WIFI SSID (nom)---" / / ne peut pas dépasser 32 caractères ! #define WLAN_PASS «---votre mot de passe WIFI---» #define WLAN_SECURITY WLAN_SEC_WPA2 / / peut être : WLAN_SEC_UNSEC, WLAN_SEC_WEP, / / WLAN_SEC_WPA ou WLAN_SEC_WPA2 < /p >< p > / *** Adafruit.io Setup *** / l’administration fédérale-AIO_SERVER de #define de < /p >< p > "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME «---votre USERNAME ADAFRUIT---» #define AIO_KEY « Vos tableaux de bord ADAFRUIT clé » / / c’est le carré jaune avec l’icône de clé sur votre tableau de bord < /p >< p > / *** Global État (vous n’avez pas besoin de changer cela!) *** < /p >< p > / installation de la classe principale de CC3000, tout comme une esquisse de CC3000 normale. Adafruit_CC3000 cc3000 = Adafruit_CC3000 (ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT); < /p >< p > / / Store le serveur MQTT, nom d’utilisateur et mot de passe dans la mémoire flash. Ceci est requis pour utiliser la bibliothèque Adafruit MQTT. const char MQTT_SERVER [] PROGMEM = AIO_SERVER ; const char MQTT_USERNAME [] PROGMEM = AIO_USERNAME ; const char MQTT_PASSWORD [] PROGMEM = AIO_KEY ; < /p >< p > / / installation de la classe CC3000 MQTT en passant dans la classe CC3000 et les détails de connexion et de serveur MQTT. Adafruit_MQTT_CC3000 mqtt (& cc3000, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); < /p >< p > / / vous n’avez pas besoin de changer quoi que ce soit sous cette ligne ! #define halt(s) {Serial.println (F (s)); while(1);} < /p >< p > / / CC3000connect est une fonction d’assistance qui met en place le CC3000 et se connecte à / / le réseau WiFi. Voir l’onglet cc3000helper.cpp au-dessus de la source ! Boolean CC3000connect (const char * wlan_ssid, const char * wlan_pass, uint8_t wlan_security); < /p >< p > / *** se nourrit *** < /p >< p > / Setup un flux appelé « cellule » pour la publication. Avis MQTT chemins pour AIO suivent la forme : < nom d’utilisateur > /feeds/ < feedname > const char PHOTOCELL_FEED [] PROGMEM = AIO_USERNAME "/ RSS/photo" ; Cellule photoélectrique Adafruit_MQTT_Publish = Adafruit_MQTT_Publish (& mqtt, PHOTOCELL_FEED); < / feedname >< / username >< / p >< p > / *** Code Sketch *** / < /p >< p > void setup() {Serial.begin(115200) ; < /p >< p > Serial.println (F ("demo Adafruit MQTT")); < /p >< p > Serial.print (F ("RAM libre:")) ; Serial.println(getFreeRam(), DEC); < /p >< p > / / initialiser le module CC3000 Serial.print (F (« \nInit le CC3000...")) ; Si (! cc3000.begin()) halt("Failed") ; < /p >< p > mqtt.subscribe (& onoffbutton); < /p >< p > while (! CC3000connect (WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {Serial.println (F ("une nouvelle tentative de WiFi")); delay(1000);}} uint32_t x = analogRead(photocellPin) ; C’est important ! Cette partie m’a fallu une éternité to figure out. < /p >< p > / /, vous devez le « uint32_t x = "partie si vous envisagez d’essayer d’ajouter un capteur différent, alors il suffit de suivre « x » par le biais de < /p >< p > / / le reste du code < /p >< p > void loop() {x = analogRead(photocellPin); / / Veillez à réinitialiser chaque itération de la boucle de surveillance ! Watchdog.Reset() ; < /p >< p > / / s’assurer que la connexion au serveur MQTT est vivante (ce qui fera le premier / / connexion et se reconnecter automatiquement lorsqu’il est déconnecté). Voir la MQTT_connect / / fonction de définition plus loin. MQTT_connect() ; < /p >< p > / / il s’agit de notre subloop occupé à « attendre les paquets entrants d’abonnement » Adafruit_MQTT_Subscribe * abonnement ; tandis que ((abonnement = mqtt.readSubscription(1000))) {if (abonnement == & onoffbutton) {Serial.print (F ("Got:")) ; Serial.println ((char *) onoffbutton.lastread) ; }} < /P >< p > / / maintenant nous pouvons publier des trucs ! Serial.Print (F ("Photocellule \nSending val")) ; Serial.Print(x) ; Serial.Print("...") ; Si (! photocell.publish(x)) {Serial.println(F("Failed"));} else {Serial.println(F("OK!"));} < /p >< p > / / ping sur le serveur pour garder la fi vivant de connexion mqtt ()! MQTT.Ping()) {Serial.println (F ("MQTT Ping a échoué."));} < /p >< p >} < /p >< p > / / fonction pour vous connecter et de vous reconnecter au besoin pour le serveur MQTT. Doit être appelée dans la boucle de fonction et il seront chargera si connexion. void MQTT_connect() {int8_t ret ; < /p >< p > / / Stop si déjà connecté. si (mqtt.connected()) {return;} < /P >< p > Serial.print (« Connecting to MQTT... "); < /p >< p > tandis que ((ret = mqtt.connect())! = 0) {/ / connect volonté retourne 0 pour Serial.println(mqtt.connectErrorString(ret)) connectés ; Si (retraité < 0) CC3000connect (WLAN_SSID, WLAN_PASS, WLAN_SECURITY) ; y0w, permet de se connecter au wifi à nouveau Serial.println ("MQTT une nouvelle tentative de connexion dans 5 secondes...") ; MQTT.Disconnect() ; Delay(5000) ; attendre 5 secondes} Serial.println ("MQTT connecté!") ; }