Enkel Arduino fotocell krets och dataloggning (4 / 5 steg)
Steg 4: Installera programvaran - Arduino med WiFi sköld
Detta steg kanske eller kanske inte gäller dig, det är beroende på vilken maskinvara du har. Arduino ombord eller klon bör acceptera någon Arduino kod du programmera det med men WiFi sköld du har maj inte arbeta med koden jag ska visa dig. Jag har en Linksprite CC3000. De flesta CC3000 är kodad på samma sätt, du måste bara hitta de bibliotek som arbetar med det och justera saker inom huvudkoden det fungerar. Med Linksprite hittade jag att Adafruit CC3000 biblioteket fungerar perfekt med min sköld och det råkar vara så att Adafruit IO är samma företag.
TL; DR: Din WiFi shield kan behöva kodas annorlunda och kan kräva mer ansträngning från din sida.
Här är koden jag använde:
#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; cellen och 10K pulldown är anslutna till a0 < /p >< p > / *** CC3000 Pins *** / < /p >< p > #define ADAFRUIT_CC3000_IRQ 3 / / måste vara ett avbrott pin!
#define ADAFRUIT_CC3000_VBAT 5 / / VBAT & CS kan vara några digitala stift.
#define ADAFRUIT_CC3000_CS 10
Att använda maskinvara SPI för återstående stiften
På en UNO, SCK = 13, MISO = 12 och MOSI = 11 < /p >< p > / *** WiFi tillträde punkt *** / < /p >< p > #define WLAN_SSID "---din WIFI SSID (namnet)---" / / får inte vara längre än 32 tecken!
#define WLAN_PASS "---din WIFI lösenord---"
#define WLAN_SECURITY WLAN_SEC_WPA2 / / kan vara: WLAN_SEC_UNSEC, WLAN_SEC_WEP,
WLAN_SEC_WPA eller WLAN_SEC_WPA2 < /p >< p > / *** Adafruit.io Setup *** / < /p >< p > #define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "---ADAFRUIT användarnamn---"
#define AIO_KEY "Din instrumentpaneler ADAFRUIT nyckel" / / är det gula torget med nyckelikonen på instrumentpanelen < /p >< p > / *** Global stat (du inte behöver ändra på detta!) *** < /p >< p > / Setup CC3000 huvudklass, precis som en normal CC3000 skiss.
Adafruit_CC3000 cc3000 = Adafruit_CC3000 (ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT); < /p >< p > / / butik MQTT servern, användarnamn och lösenord i flash-minnet.
Detta behövs för att använda Adafruit MQTT biblioteket.
CONST char MQTT_SERVER [] PROGMEM = AIO_SERVER;
CONST char MQTT_USERNAME [] PROGMEM = AIO_USERNAME;
CONST char MQTT_PASSWORD [] PROGMEM = AIO_KEY; < /p >< p > / / Setup klassen CC3000 MQTT av passerar i CC3000 klass och MQTT server och logga in detaljer.
Adafruit_MQTT_CC3000 mqtt (& cc3000, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); < /p >< p > / / behöver du inte ändra någonting under raden!
#define halt(s) {Serial.println (F (s)); while(1);} < /p >< p > / / CC3000connect är en hjälpare funktion som sätter upp CC3000 och ansluter till
WiFi-nätverket. Se cc3000helper.cpp fliken ovan för källan!
booleska CC3000connect (const char * wlan_ssid, const char * wlan_pass, uint8_t wlan_security); < /p >< p > / *** Feeds *** < /p >< p > / Setup ett foder som heter "fotocell" för publicering.
Meddelande MQTT banor för AIO följa form: < användarnamn > /feeds/ < feedname >
CONST char PHOTOCELL_FEED [] PROGMEM = AIO_USERNAME "/ feeds/fotocell";
Adafruit_MQTT_Publish fotocell = Adafruit_MQTT_Publish (& mqtt, PHOTOCELL_FEED); < / feedname >< / användarnamn >< /p >< p > / *** skiss kod *** / < /p >< p > void setup() {
Serial.BEGIN(115200); < /p >< p > Serial.println F ("Adafruit MQTT demo"). < /p >< p > Serial.print (F ("fri slå ned:")); Serial.println(getFreeRam(), DEC); < /p >< p > / / initialisera modulen CC3000
Serial.Print F ("\nInit CC3000...").
om (! cc3000.begin())
halt("failed"); < /p >< p > mqtt.subscribe (& onoffbutton); < /p >< p > tag (! CC3000connect(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
Serial.println F ("försöker igen WiFi").
Delay(1000);
}
}
uint32_t x = analogRead(photocellPin); Detta är viktigt! Denna del tog mig evigheter att figurera ut. < /p >< p > / / du behöver det "uint32_t x =" del om du planerar på att försöka lägga till en annan sensor, sedan bara följa "x" genom < /p >< p > / / resten av koden < /p >< p > void loop() {
x = analogRead(photocellPin);
Se till att återställa watchdog varje loopen upprepas!
Watchdog.Reset(); < /p >< p > / / säkerställa anslutningen till MQTT servern är vid liv (detta kommer att göra först
anslutning och automatiskt återansluta när frånkopplad). Se MQTT_connect
funktionsdefinitionen ytterligare nedan.
MQTT_connect(); < /p >< p > / / detta är vår "vänta för inkommande prenumeration paket" upptagen subloop
Adafruit_MQTT_Subscribe * prenumeration;
medan ((abonnemang = mqtt.readSubscription(1000))) {
om (prenumeration == & onoffbutton) {
Serial.Print (F ("fick:"));
Serial.println ((char *) onoffbutton.lastread);
}
} < /P >< p > / / nu kan vi publicera grejer!
Serial.Print (F ("\nSending fotocell val"));
Serial.Print(x);
Serial.Print("...");
om (! photocell.publish(x)) {
Serial.println(F("failed"));
} annat {
Serial.println(F("OK!"));
} < /p >< p > / / ping servern för att hålla liv i den mqtt anslutningen
om (! mqtt.ping()) {
Serial.println F ("MQTT Ping misslyckades.").
{} < /p >< p >} < /p >< p > / / funktion för att ansluta och återkoppla som krävs för att MQTT servern.
Bör kallas i slingan funktion och det kommer att ta hand om ansluter.
void MQTT_connect() {
int8_t ret; < /p >< p > / / sluta om redan ansluten.
om (mqtt.connected()) {
hemkomst.
} < /P >< p > Serial.print ("ansluter till MQTT... "); < /p >< p > medan ((ret = mqtt.connect())! = 0) {/ / Anslut vilja avkastning 0 för ansluten
Serial.println(mqtt.connectErrorString(ret));
om (ret < 0)
CC3000connect (WLAN_SSID, WLAN_PASS, WLAN_SECURITY); y0w, kan ansluta till wifi igen
Serial.println ("försöker igen MQTT anslutning i 5 sekunder...");
mqtt.Disconnect();
Delay(5000); vänta 5 sekunder
}
Serial.println ("MQTT ansluten!");
}