Ich habe das Problem, dass mein Ardoino ständig die Verbindung verliert. Das Empfangssignal des SIM800L ist gut bis sehr gut.
Ich sende 5 Wirtual.Write ich habe schon alles versucht, mit eigen Funktionen, nicht alle auf einmal senden, viel zeit zwischen dem Senden…
Mein Code:
/*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest
Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.
Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp
http://twitter.com/blynk_app
Blynk library is licensed under MIT license
This example code is in public domain.
*************************************************************
Attention! Please check out TinyGSM guide:
https://tiny.cc/tinygsm-readme
Change GPRS apm, user, pass, and Blynk auth token to run :)
Feel free to apply it to any other example. It's simple!
*************************************************************/
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
/* Fill-in your Template ID (only if using Blynk.Cloud) */
//#define BLYNK_TEMPLATE_ID "XXXXXXXXXXXXXXXXXX"
// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_M590
//#define TINY_GSM_MODEM_A6
//#define TINY_GSM_MODEM_A7
//#define TINY_GSM_MODEM_BG96
//#define TINY_GSM_MODEM_XBEE
// Default heartbeat interval for GSM is 60
// If you want override this value, uncomment and set this option:
//#define BLYNK_HEARTBEAT 30
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#include <EEPROM.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "VEXK-Z0q2a5r2q1bmOkK3hdi5sLGqcb6";
// Your GPRS credentials
// Leave empty, if missing user or pass
char apn[] = "pinternet.interkom.de";
char user[] = "";
char pass[] = "";
// Hardware Serial on Mega, Leonardo, Micro
//#define SerialAT Serial1
// or Software Serial on Uno, Nano
#include <SoftwareSerial.h>
SoftwareSerial SerialAT(2, 3); // RX, TX
TinyGsm modem(SerialAT);
BlynkTimer timer;
unsigned long lastmillis2; //Millis speichervariabel Futterdauer
unsigned long lastmillis4; //Millis speichervariabel Fehlermeldung Wasser leer
//++++++Variable+++++++++//
float voltage;
int futter;
bool pumpe1;
bool pumpe2;
bool merkertrace;
bool merkertrace2;
bool traceinfo = false;
bool wasserfehler;
bool wasserfehler2;
int pumpez1;
int pumpez2;
int z;
int wasserValue;
int wasserValue2;
WidgetLED led1(V6);
WidgetLED led2(V8);
int wasserstop;
BLYNK_WRITE(V15)
{
wasserstop = param.asInt(); // Holt sich den Wert von V1 und schreibt ihn auf "pinValue"
Serial.print("Wasserstop:");
Serial.println(wasserstop);
}
int futterz;
BLYNK_WRITE(V10)
{
futterz = param.asInt(); // Holt sich den Wert von V1 und schreibt ihn auf "pinValue"
// Serial.print("futterzeit:");
// Serial.println(futterz);
}
int wasserreset;
BLYNK_WRITE(V4)
{
wasserreset = param.asInt(); // Holt sich den Wert von V1 und schreibt ihn auf "pinValue"
Serial.print("Wasser_reset:");
Serial.println(wasserreset);
wasserfehler = false ;
wasserfehler2 = false;
led1.off();
led2.off();
}
int futterAus;
BLYNK_WRITE(V2)
{
futterAus = param.asInt(); // Holt sich den Wert von V1 und schreibt ihn auf "pinValue"
Serial.print("Futter AUS:");
Serial.println(futterAus);
futter = false ;
}
int futterAn;
BLYNK_WRITE(V3)
{
futterAn = param.asInt(); // Holt sich den Wert von V1 und schreibt ihn auf "pinValue"
Serial.print("Futter AN:");
Serial.println(futterAn);
futter = true;
}
void sendwasser()
{
wasserValue = analogRead(A1);
wasserValue2 = analogRead(A2);
//++++++Wasserstand Eins Messen++++++//
Serial.print(" | Wasserstand 1:");
Serial.print(wasserValue);
Serial.print(" | Wasserstand 2:");
Serial.println(wasserValue2);
}
void senddata()
{
//++++++Wasserpumpen 1 Trace senden+++++//
if (pumpe1 == true && merkertrace == true) {
Blynk.virtualWrite(V7, pumpe1);
Serial.print(" | P1-> ");
Serial.print(pumpe1);
merkertrace = false;
}
else if (pumpe1 == false && merkertrace == false){
Blynk.virtualWrite(V7, pumpe1);
Serial.print(" | P1-> ");
Serial.print(pumpe1);
merkertrace = true;
}
else {
Serial.print(" | P1: ");
Serial.print(pumpe1);
}
//++++++Wasserpumpen 2 Trace senden+++++//
if (pumpe2 == true && merkertrace2 == true) {
Blynk.virtualWrite(V9, pumpe1);
Serial.print(" | P2-> ");
Serial.print(pumpe2);
merkertrace2 = false;
}
else if (pumpe2 == false && merkertrace2 == false){
Blynk.virtualWrite(V9, pumpe1);
Serial.print(" | P2-> ");
Serial.print(pumpe2);
merkertrace2 = true;
}
else {
Serial.print(" | P2: ");
Serial.print(pumpe2);
}
Blynk.virtualWrite(V5, voltage);
Serial.print(" | Voltage: ");
Serial.println(voltage);
}
void sendinfo()
{
if (traceinfo == false){
Blynk.syncVirtual(V10);
traceinfo = true;
Serial.print(" | futterzeit:");
Serial.println(futterz);
}
if (traceinfo == true){
Blynk.virtualWrite(V12, z);
Serial.print(" | Verbindungen:");
Serial.println(z);
traceinfo = false;
}
}
void sendvolt()
{
//++++++Spannung Messen, und auf V5 schreiben++++++//
int sensorValue = analogRead(A0);
voltage = sensorValue * (5 / 1023.00)*3 ; // Mit dem Spannungsteiler die Korrekte Spannung ausrechnen
}
void setup()
{
timer.setInterval(10000L, sendvolt);
timer.setInterval(2000L, sendwasser);
timer.setInterval(5000L, senddata);
timer.setInterval(50000L, sendinfo);
// Debug console
Serial.begin(19200);
pinMode(12, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(12, HIGH);
pinMode(13, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(13, HIGH);
pinMode(11, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(11, HIGH);
pinMode(10, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(10, HIGH);
pinMode(9, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(9, HIGH);
pinMode(8, OUTPUT); // Setzt den Digitalpin 13 als Outputpin
digitalWrite(8, HIGH);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
// Set GSM module baud rate
SerialAT.begin (9600);
delay(3000);
// Restart takes quite some time
// To skip it, call init() instead of restart()
Serial.println("Initializing modem...");
modem.restart();
// Unlock your SIM card with a PIN
//modem.simUnlock("1510");
Blynk.begin(auth, modem, apn, user, pass);
}
void loop()
{
timer.run(); // Initiates BlynkTimer
Blynk.run();
// Serial.print("Futterzeit: ");
// Serial.println(futterz);
// Serial.print("offline: ");
// Serial.println(z);
//++++++Futterautomat mit einschaltintervall ++++++++++++++++++//
if (futter == true){
// Serial.println("Futter Annnnnnnnn");
Serial.println(lastmillis2);
if ((millis() - lastmillis2) >= (futterz*1000) || futterAus == 1){ //Zeit eingeben für Channel Aktivierung
futter = false ;
Serial.println("F_off");
lastmillis2 = millis();
}
}
//++++++Restart nachdem die GSM verbinung disconectet ist++++++//
if (!Blynk.connected()){
Serial.println("A_off");
digitalWrite(12, HIGH); //Fütterung Stoppen
futter = false ; //Fütterung Stoppen
digitalWrite(9, HIGH); //Pumpe eins vorm Disconect deaktivieren
pumpe1 = false ; //Pumpe eins vorm Disconect deaktivieren
pumpe2 == false ; //Pumpe zwei vorm Disconect deaktivieren
digitalWrite(8, HIGH); //Pumpe zwei vorm Disconect deaktivieren
z ++ ;
Serial.println("disconnected.... ");
modem.restart();
Blynk.begin(auth, modem, apn, user, pass);
Serial.println("reconfigured... ");
Blynk.syncVirtual(V10);
merkertrace = true;
merkertrace2 = true;
}
//++++++Pumpe 1 Abschalten+++++++++//
if (wasserValue > 800) {
Serial.println("P1_off");
// Serial.println(wasserValue);
pumpe1 = false;
}
//++++++Pumpe 2 Abschalten+++++++++//
if (wasserValue2 > 800) {
Serial.println("P2_off");
// Serial.println(wasserValue2);
pumpe2 = false;
}
//++++++Pumpe 1 Einschalten++++++//
if (wasserValue < 500 && wasserfehler == false && pumpe1 == false && pumpe2 == false ){
Serial.println("P1_on");
pumpe1 = true;
merkertrace2 = true;
lastmillis4 = millis();
}
//++++++Pumpe 2 Einschalten++++++//
if (wasserValue2 < 500 && wasserfehler2 == false && pumpe2 == false && pumpe1 == false){
Serial.println("P2_on");
pumpe2 = true;
merkertrace = true;
lastmillis4 = millis();
}
//++++++Pumpe Wasser Fehler +++++//
if (pumpe1 == true | pumpe2 == true){
if ((millis() - lastmillis4) >= (10000)){
//Blynk.notify("Wasser ist Leer!!");
Serial.print(" | W_F: ");
if (pumpe1 == true){
led1.on();
Serial.println("T1");
pumpe1 = false;
pumpe2 = false;
wasserfehler = true;
}
if (pumpe2 == true){
led2.on();
Serial.println("T2");
pumpe1 = false;
pumpe2 = false;
wasserfehler2= true;
}
}}
if (pumpe1 == true && wasserstop == 0) {digitalWrite(9, LOW);}
if (pumpe1 == false && wasserstop == 0){digitalWrite(9, HIGH);}
if (pumpe2 == true && wasserstop == 0){digitalWrite(8, LOW);}
if (pumpe2 == false && wasserstop == 0){digitalWrite(8, HIGH);}
if (futter == true){digitalWrite(12, LOW);}
if (futter == false){digitalWrite(12, HIGH);}
}