Bouwen van een zonne-aangedreven ESP8266 (7 / 8 stap)

Stap 7: Arduino IDE broncode voor het Project


Broncode voor de SolarPowerESP8266 Project

Hieronder vindt u de broncode voor de Arduino IDE ESP8266 pack. De Arduino IDE ESP8266 pack installeren Controleer deze post.

Vereiste bibliotheken:

aREST.h - https://github.com/marcoschwartz/aREST

SunAirPlus INA3221 Libraries - https://github.com/switchdoclabs/SDL_Arduino_INA3221

Zorg ervoor dat u in uw eigen waarden voor SSID en wachtwoord voor uw lokale toegangspunt:

SolarPowerESP8266.ino

 /* SwitchDoc Labs Code for SolarPower ESP8266 Uses ESP8266 and SunAirPlus Dedember 2015 */ #pragma GCC diagnostic ignored "-Wwrite-strings" extern "C" { #include "user_interface.h" } #include #define DEBUG_MODE 1 #include #include // SunAirPlus Data Structures // Note: SunAirPlus uses a 3 channel current/voltage I2C chip - INA3221 to read all values - see github.com/switchdoclabs/SDL_Arduino_INA3221 // #include "SDL_Arduino_INA3221.h" // SAP INA3221 SDL_Arduino_INA3221 ina3221_SAP; // structure for one SAP ina3221 struct SAPData { float busVoltage[3]; float current[3]; float loadVoltage[3]; }; SAPData currentSAPData; // the three channels of the INA3221 named for SunAirPlus Solar Power Controller channels (www.switchdoc.com) #define SAP_LIPO_BATTERY_CHANNEL 0 #define SAP_SOLAR_CELL_CHANNEL 1 #define SAP_OUTPUT_CHANNEL 2 // SAP Buffer for sending readings to RaspberryPi struct SAPBufferStruct { unsigned long timeStamp; SAPData SAPEntry; }; #define SAPBUFFERSIZE 200 SAPBufferStruct SAPBuffer[SAPBUFFERSIZE]; int CurrentSAPBuffer; int lastReadSAPBuffer; #include "SAPData.h" //---------------------------------------------------------------------- //Local WiFi SunAirPlus const char* ssid = "YOURSSID"; const char* password = "YOURPASSWORD"; #define SOLARPOWERESP8266VERSION 004 //---------------------------------------------------------------------- int blinkPin = 0; // pin to blink led at each reading // The port to listen for incoming TCP connections #define LISTEN_PORT 80 // Create an instance of the server WiFiServer server(LISTEN_PORT); unsigned long oldReadSunAirPlusTime; unsigned long newReadSunAirPlusDeltaTime; int RestTimeStamp; String RestDataString; // Create aREST instance aREST rest = aREST(); // Custom function accessible by the API int ledControl(String command) { // Get state from command int state = command.toInt(); digitalWrite(0, state); return 1; } void setup() { pinMode(blinkPin, OUTPUT); // pin that will blink every reading digitalWrite(blinkPin, HIGH); // High of this pin is LED OFF // SAP initialization startSAPINA3221(); Serial.begin(115200); // we agree to talk fast! Serial.println("----------------"); Serial.println("SolarPower ESP8266"); Serial.println("----------------"); RestTimeStamp = 0; RestDataString = ""; rest.variable("RestTimeStamp", &RestTimeStamp); rest.variable("RestDataString", &RestDataString); // Function to be exposed rest.function("led", ledControl); // Give name and ID to device rest.set_id("1"); rest.set_name("SolarPowerESP8266"); Serial.print("Connecting to "); Serial.print(ssid); if (strcmp (WiFi.SSID().c_str(), ssid) != 0) { WiFi.begin(ssid, password); } while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Local WiFi connected, IP address: "); Serial.println(WiFi.localIP()); // Start the server server.begin(); Serial.println("Server started"); oldReadSunAirPlusTime = micros(); initSAPBuffer(); } int sampleCount = 0; // Loop through reading current and solar performance void loop() { // Handle REST calls WiFiClient client = server.available(); if (client) { while (!client.available()) { delay(1); } if (client.available()) { Serial.print("Buffer Count="); Serial.println(returnCountSAPBuffer()); RestTimeStamp = millis(); //printDebugFullSAPBuffer(); RestDataString = assembleSAPBuffer(); rest.handle(client); } } newReadSunAirPlusDeltaTime = micros() - oldReadSunAirPlusTime; // doing this handles the 71 second rollover because of unsighned arithmetic if (newReadSunAirPlusDeltaTime > 1000000) // check for 1 second work to be done { Serial.print("Free heap on ESP8266:"); Serial.println(ESP.getFreeHeap(), DEC); digitalWrite(blinkPin, LOW); // High of this pin is LED ON Serial.println(); readSAP(); writeSAPBuffer(); digitalWrite(blinkPin, HIGH); // High of this pin is LED OFF oldReadSunAirPlusTime = micros(); //printDebugFullSAPBuffer(); } yield(); // take a break - you must do this for the ESP8266 to work correctly in all cases! } 

Het bestand SAPData.h

 // SAP Buffer Routines void initSAPBuffer() { CurrentSAPBuffer = -1; lastReadSAPBuffer = -1; int i; for (i = 0; i < SAPBUFFERSIZE; i++) { SAPBuffer[i].timeStamp = 0; } } void writeSAPBuffer() { //Serial.print("Entry WriteSAPBuffer C / R "); //Serial.print(CurrentSAPBuffer); //Serial.print(" / "); //Serial.println(lastReadSAPBuffer); CurrentSAPBuffer++; if (CurrentSAPBuffer >= SAPBUFFERSIZE) // wrap around { CurrentSAPBuffer = 0; } SAPBuffer[CurrentSAPBuffer].timeStamp = millis(); SAPBuffer[CurrentSAPBuffer].SAPEntry = currentSAPData; //Serial.print("Exit WriteSAPBuffer C / R "); //Serial.print(CurrentSAPBuffer); //Serial.print(" / "); //Serial.println(lastReadSAPBuffer); } int returnCountSAPBuffer() { int i; int count = 0; for (i = 0; i < SAPBUFFERSIZE; i++) { if (SAPBuffer[i].timeStamp > 0) count++; } return count; } int readSAPBuffer(SAPBufferStruct *mySAPBuffer) { //Serial.print("inReadSAPBuffer C / R "); //Serial.print(CurrentSAPBuffer); //Serial.print(" / "); //Serial.println(lastReadSAPBuffer); // read out all data, doesn't matter the order. The SQL Databoase on the Pi will figure it out... if (lastReadSAPBuffer == -1 ) // deal with first read no matter how long ago { // scan Buffer for smallest > 0 timeStamp - set to lastReadSAPBuffer int i; int smallestTimeStamp = 4294967295; // 2^32-1 int smallestIndex = 0; for (i = 0; i < SAPBUFFERSIZE; i++) { if (SAPBuffer[i].timeStamp != 0) { if (SAPBuffer[i].timeStamp < smallestTimeStamp) { smallestTimeStamp = SAPBuffer[i].timeStamp; smallestIndex = i; } } } lastReadSAPBuffer = smallestIndex; } if (SAPBuffer[lastReadSAPBuffer].timeStamp == 0) { return -1; } *mySAPBuffer = SAPBuffer[lastReadSAPBuffer]; SAPBuffer[lastReadSAPBuffer].timeStamp = 0; lastReadSAPBuffer++; if (lastReadSAPBuffer >= SAPBUFFERSIZE) { lastReadSAPBuffer = 0; } } String assembleSAPBuffer() { int status; SAPBufferStruct mySAPBuffer; String returnString; returnString = ""; returnString = String(ESP.getFreeHeap()); status = readSAPBuffer(&mySAPBuffer); while (status != -1) { if (returnString.length() != 0) { returnString += " | "; } String sensorBuild; sensorBuild = String(mySAPBuffer.timeStamp) + ","; int i; for (i = 0; i < 3; i++) { sensorBuild += String(mySAPBuffer.SAPEntry.busVoltage[i], 2) + ","; sensorBuild += String(mySAPBuffer.SAPEntry.loadVoltage[i], 2) + ","; if (i < 2) sensorBuild += String(mySAPBuffer.SAPEntry.current[i], 2) + ","; else sensorBuild += String(mySAPBuffer.SAPEntry.current[i], 2) ; //Serial.print("sensorBuild="); //Serial.println(sensorBuild); } returnString += sensorBuild; status = readSAPBuffer(&mySAPBuffer); } return returnString; } void printDebugFullSAPBuffer() { Serial.print("DebugFullSAPBuffer State C / R "); Serial.print(CurrentSAPBuffer); Serial.print(" / "); Serial.println(lastReadSAPBuffer); int i; for (i = 0; i < SAPBUFFERSIZE; i++) { Serial.print("index:"); Serial.print(i); Serial.print(" timeStamp = "); Serial.print(SAPBuffer[i].timeStamp); if (SAPBuffer[i].timeStamp == 0) { Serial.println(" SAPEntry = null"); } else { Serial.println(" SAPEntry = Full"); /* SAPData currentSAPData; currentSAPData = SAPBuffer[i].SAPEntry; Serial.println("--------SAP ENTRY-------"); Serial.print("LIPO_Battery Current: "); Serial.print(currentSAPData.current[0]); Serial.println(" mA"); Serial.print("Solar Cell Bus Voltage: "); Serial.print(currentSAPData.busVoltage[1]); Serial.println(" V"); Serial.print("Output Bus Current: "); Serial.print(currentSAPData.current[2]); Serial.println(" mA"); */ } } } // Read data from specific SunAirPlus unit (SAP0 - SAP2) void startSAPINA3221() { ina3221_SAP.begin(); // SAP } void readSAP() { int i; for (i = 0; i < 3; i++) { currentSAPData.busVoltage[i] = 0.0f; currentSAPData.current[i] = 0.0f; currentSAPData.loadVoltage[i] = 0.0f; } currentSAPData.busVoltage[0] = ina3221_SAP.getBusVoltage_V(SAP_LIPO_BATTERY_CHANNEL + 1); currentSAPData.current[0] = ina3221_SAP.getCurrent_mA(SAP_LIPO_BATTERY_CHANNEL + 1); // minus is to get the "sense" right. - means the battery is charging, + that it is discharging currentSAPData.loadVoltage[0] = currentSAPData.busVoltage[0] + (ina3221_SAP.getShuntVoltage_mV(SAP_LIPO_BATTERY_CHANNEL + 1) / 1000); currentSAPData.busVoltage[1] = ina3221_SAP.getBusVoltage_V(SAP_SOLAR_CELL_CHANNEL + 1); currentSAPData.current[1] = - ina3221_SAP.getCurrent_mA(SAP_SOLAR_CELL_CHANNEL + 1); // minus is to get the "sense" right. - means the battery is charging, + that it is discharging currentSAPData.loadVoltage[1] = currentSAPData.busVoltage[1] + (ina3221_SAP.getShuntVoltage_mV(SAP_SOLAR_CELL_CHANNEL + 1) / 1000); currentSAPData.busVoltage[2] = ina3221_SAP.getBusVoltage_V(SAP_OUTPUT_CHANNEL + 1); currentSAPData.current[2] = ina3221_SAP.getCurrent_mA(SAP_OUTPUT_CHANNEL + 1); // minus is to get the "sense" right. - means the battery is charging, + that it is discharging currentSAPData.loadVoltage[2] = currentSAPData.busVoltage[2] + (ina3221_SAP.getShuntVoltage_mV(SAP_OUTPUT_CHANNEL + 1) / 1000); Serial.println("--------SAP Data-------"); Serial.print("LIPO_Battery Bus Voltage: "); Serial.print(currentSAPData.busVoltage[0]); Serial.println(" V"); Serial.print("LIPO_Battery Load Voltage: "); Serial.print(currentSAPData.loadVoltage[0]); Serial.println(" V"); Serial.print("LIPO_Battery Current: "); Serial.print(currentSAPData.current[0]); Serial.println(" mA"); Serial.println(""); Serial.print("Solar Cell Bus Voltage: "); Serial.print(currentSAPData.busVoltage[1]); Serial.println(" V"); Serial.print("Solar Cell Load Voltage: "); Serial.print(currentSAPData.loadVoltage[1]); Serial.println(" V"); Serial.print("Solar Cell Current: "); Serial.print(currentSAPData.current[1]); Serial.println(" mA"); Serial.println(""); Serial.print("Output Bus Bus Voltage: "); Serial.print(currentSAPData.busVoltage[2]); Serial.println(" V"); Serial.print("Output Bus Load Voltage: "); Serial.print(currentSAPData.loadVoltage[2]); Serial.println(" V"); Serial.print("Output Bus Current: "); Serial.print(currentSAPData.current[2]); Serial.println(" mA"); Serial.println(""); Serial.println("--------"); return; } 

Gerelateerde Artikelen

Bouwen van een zonne-aangedreven R/C auto

Bouwen van een zonne-aangedreven R/C auto

Dit is mijn onlangs voltooide zonne-RC auto. Ik bouwde deze auto om vonk interesse concurreren in een Solar Race in de zomer van 2009 in de VS Dit project gebruikt veel uit de plank hobby delen en zou kunnen worden gebouwd door een R/C hobbyist met e
Maken van een zonne-aangedreven ventilator

Maken van een zonne-aangedreven ventilator

Welkom bij de handleiding van het maken van een zonne-aangedreven ventilator!Om te beginnen, moet u:Green Science Solar Rover Kit (kunnen gekocht worden bij elke Michael's Art Store)Toegankelijkheid van een 3D-PrinterToegankelijkheid van computer (on
Maken van een zonne-aangedreven zaklamp uit oude tuin verlichting

Maken van een zonne-aangedreven zaklamp uit oude tuin verlichting

bent u ziek van het kopen van nieuwe batterijen voor uw zaklamp?Waarom niet u een zonne-aangedreven afspraak uit enkele oude zonne-aangedreven tuin lichten maken?In dit Instructable zal ik u tonen hoe te maken van een geldbesparende groene fakkel.Sor
Hoe het bouwen van een zonne-energiecentrale

Hoe het bouwen van een zonne-energiecentrale

Dit Instructable is over het bouwen van een batterij-aggregaat dat de kosten van de zon. Ik bouwde het dit afgelopen zomer te hebben van een draagbaar apparaat dat ik kan lopen en mijn gadgets kosten op.Stap 1: BedradingsschemaHet eerste wat dat ik d
Bouwen van een zonne-lader van de telefoon op de goedkope

Bouwen van een zonne-lader van de telefoon op de goedkope

ik doe heel veel van lopen rond en ik kan niet altijd op een stopcontact. dus mijn draagbare telefoonlader handig komt.Probleem is dat als ik kan niet mijn telefoon laad ik de lader ofwel niet kan laden. Natuurlijk kon ik altijd kopen een draagbare z
Hoe het bouwen van een zonne-fles lamp

Hoe het bouwen van een zonne-fles lamp

donkere gebieden in uw huis tijdens overdag dankzij het concept van deze groene en duurzame oplichten. Recycle gebruikte doorzichtige plastic frisdrank flessen, voeg water + bleekmiddel en vervolgens installeren. Na de installatie verzorgen deze sola
Bouwen van een zonne-koffieboon brander

Bouwen van een zonne-koffieboon brander

Dit project kan worden overwogen groen om verschillende redenen.Eerst is het gemaakt van materiaal dat waarschijnlijk zou worden weggegooid. Ten tweede, het werkt volledig off-grid. En tot slot, het wordt gebruikt voor geroosterde 'groene' koffie bon
Hoe het bouwen van een goedkope, aangedreven Luidsprekerbox

Hoe het bouwen van een goedkope, aangedreven Luidsprekerbox

Intro / redenerenIk hergebruiken spullen die ik heb liggen. Ik pakte een 200 Watt AMP voor slechts $20. Ik had ook een heleboel dozen verplaatsen en sommige Rockford Fosgates ik was niet met behulp van en verschillende pc power supply units (hierna P
Hoe het bouwen van een batterij aangedreven Motor g17

Hoe het bouwen van een batterij aangedreven Motor g17

Hoe het werktWanneer twee magneten worden dicht bij elkaar geplaatst ze af te weren. Dit is de fundamentele basis van een elektromotor. Wanneer elektriciteit langs de draad reist maakt een tijdelijke magnetisch veld, zolang de elektriciteit blijft st
Bouwen van een gisting aangedreven waterpomp

Bouwen van een gisting aangedreven waterpomp

de pomp zal werken met behulp van de druk opgebouwd door het gas vrijkomt uit een fermentatieproces.   Ik verwacht dat de fermentatie van gist en melkzuur goed zal werken. De "brandstof" kunnen keukenafval of tuinafval.Ik denk dat deze pompen wo
Hoe het bouwen van een batterij aangedreven vliegtuig (Balsa hout vliegtuig)

Hoe het bouwen van een batterij aangedreven vliegtuig (Balsa hout vliegtuig)

een "how to" gids laat zien hoe te maken van uw eigen batterij aangedreven balsa houten vliegtuig. Ik gebruikte mijn vliegtuig 24" in een voorafgaande tutorial in deze video getoond. U vindt alles wat die u nodig hebt om het te maken op Rad
Het instellen van een zonne-aangedreven webcam-server met behulp van NanosG20 met Debian

Het instellen van een zonne-aangedreven webcam-server met behulp van NanosG20 met Debian

NanosG20 is een van de meest energie efficiënte Linux planken wtth een 400 MHz ARM processor, consumeren < 1 W bij het uitvoeren en 25 mA van 5 V power-down modus. Met een webacm en WiFi stick stroomverbruik is 2,5 W.Dit is de juiste boord, moet u ee
Hoe het bouwen van een gecentraliseerd zonne-via

Hoe het bouwen van een gecentraliseerd zonne-via

dit is een goedkope en gemakkelijke manier om te bouwen van een zonne-reflectie-trog.Stap 1: materialenMaterialen:2x2.45m 25mm aluminium hoek voorraad2x2.5m 25mm aluminium hoek voorraad8x0.39m 25mm aluminium hoek voorraad4x0.80m 25mm aluminium hoek v
Hoe maak je een zonne-aangedreven ventilator!

Hoe maak je een zonne-aangedreven ventilator!

(''Hooray! Het eindelijk gebeurd. Het is een beetje laat in de wedstrijd, maar we hopen dat het goed!'' )Dit project is wat we zijn het invoeren voor de wedstrijd Go Green. Het is een koele zonne-aangedreven mini fan. Het idee is dat als je een fan z