Riccardo
| Inviato il: 28/03/2017 21:29:53
|
lo sketch
#define NumeroCelle 4
#define kPartTens 6
#include <ESP8266WiFi.h>
const char* ssid = "Telecom-93798311";
const char* password = "-----------------";
IPAddress ip(192,168,3,101); //ip statico
IPAddress gateway(192,168,3,1); //gateway
IPAddress subnet(255,255,255,0);
int s0 = 2;
int s1 = 0;
int s2 = 4;
int s3 = 5;
float SIG_pin = 0;
WiFiServer server(80);
void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(115200);
delay(10);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
double VBattLett[NumeroCelle];
double VBattCalc, VCellPrec;
int i;
// Leggo le tensioni sulle singole celle
for (i = 0; i < NumeroCelle; i++)
{
VBattLett[i] = Mux(i);
}
VCellPrec = 0;
for (i = 0; i < NumeroCelle; i ++)
{
// Calcolo le tensioni delle singole celle
VBattCalc = (VBattLett[i] * (i + 1)) - VCellPrec;
VCellPrec += VBattCalc;
// Se utilizzo delle celle diverse da 2 Volt calcolo i valori da mostrare a video
VBattCalc = VBattCalc * kPartTens;
// Mostro i valori a video
client.print ("Batteria ");
client.print (i + 1);
client.print (" = ");
client.print (VBattCalc);
client.print (" V - ");
delay (10);
}
}
float Mux(int channel){
int controlPin[] = {s0, s1, s2, s3};
int muxChannel[16][4]={
{0,0,0,0}, //channel 0
{1,0,0,0}, //channel 1
{0,1,0,0}, //channel 2
{1,1,0,0}, //channel 3
{0,0,1,0}, //channel 4
{1,0,1,0}, //channel 5
{0,1,1,0}, //channel 6
{1,1,1,0}, //channel 7
{0,0,0,1}, //channel 8
{1,0,0,1}, //channel 9
{0,1,0,1}, //channel 10
{1,1,0,1}, //channel 11
{0,0,1,1}, //channel 12
{1,0,1,1}, //channel 13
{0,1,1,1}, //channel 14
{1,1,1,1} //channel 15
};
for(int i = 0; i < 4; i ++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
float val = analogRead(SIG_pin)* (3.3 / 1024.0)*20;
return val;
}
Modificato da Riccardo - 28/03/2017, 21:42:58
--------------- Q.CELLS Q.PEAK 4575W sud-est Solar Frontier CIS 850W sud-ovest Inverter PIP5048MST Batterie:LifePo4 Seplos MASON-48280-DIY EVE280AK 28,6 kWh Scaldabagno Ferroli 30l 1500w Scaldabagno Ariston 80l 1200w
|