MRN306
October 22, 2020, 12:35pm
1
the program runs normally but when I add the command “”
SoftwareSerial gpsSerial(6, 7);
system could not connect to blynk
#define BLYNK_PRINT Serial // Bagian ini terhubung ke server BLYNK
#define TINY_GSM_MODEM_SIM800 // Agar SIM800L berfungsi
#include <TinyGsmClient.h> // library
#include <BlynkSimpleSIM800.h>
#include <SoftwareSerial.h>
//#include <SPI.h>
#include <TinyGPS++.h>
#include <RH_ASK.h>
RH_ASK driver;
const int Pin12 = 12;
const int Pin10 = 10;
const int Pin5 = 5;
const int Pin3= 3;
int x = 0;
char auth[] = "3NC7a1Gz_jfIKnoLNAp28fSE1FCOovkF";
char apn[] = "indosatooredoo.com";
char user[] = "";
char pass[] = "";
SoftwareSerial SerialAT(4, 5); // RX, TX
WidgetMap myMap(V0);
TinyGsm modem(SerialAT);
//SoftwareSerial gpsSerial(6, 7);
BlynkTimer timer;
int d=0;
int counter=0;
void setup()
{ pinMode(Pin5, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin12, OUTPUT);
pinMode(Pin10, OUTPUT);
digitalWrite(Pin3, HIGH);
Serial.begin(9600);
if (!driver.init())
{ Serial.println("init failed");}
SerialAT.begin(9600);
delay(10);
SerialAT.begin(9600);
delay(3000);
Blynk.begin(auth, modem, apn, user, pass);
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{ Blynk.run();
timer.run();
}
void myTimerEvent()
{
rf();
checkBlynk();
}
void checkBlynk(){ // called every 3 seconds by SimpleTimer
bool isconnected = Blynk.connected();
if (isconnected == true){
digitalWrite(Pin10, HIGH);
delay(50);
digitalWrite(Pin10, LOW);
delay(500);
}
else if (isconnected == false){
d++;
delay(1000) ;
}
if(d > 2){
Blynk.begin(auth, modem, apn, user, pass);
Serial.println("connected");
d=0;
}
}
void rf()
{
uint8_t buf[1];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen))
{
Serial.println((char*)buf);
if (buf[0] == '1')
{ x = 0;
digitalWrite(Pin12, HIGH);
digitalWrite(Pin10, LOW);
digitalWrite(Pin5, LOW);
delay(100);
}
else if (buf[0] == '2')
{ x = 0;
digitalWrite(Pin3, LOW);
delay(100);
}
}
digitalWrite(Pin12, LOW );
if (Pin12 != HIGH )
{
x++;
delay(1000);
if (x == 5)
{
//digitalWrite(Pin5, HIGH);
digitalWrite(Pin10, HIGH);
delay(1000);
call();
x = 0;
}
}
}
void call()
{
Serial.println("ok");
Blynk.notify("ALARM");
counter++;
counter=0;
}
20:29:04.387 -> [8509] Connecting to blynk-cloud.com:80
20:29:05.766 -> [9908] Ready (ping: 674ms).
20:29:16.578 -> [20717] Connecting to blynk-cloud.com:80
20:29:17.913 -> [22036] Ready (ping: 650ms).
What hardware are you running this on?
Pete.
MRN306
October 23, 2020, 6:01am
3
arduino nano, sim 800l, gps neo 6m, rf 433 mhz
marino.
I’m not sure why the Blynk connection drops when you add the second SoftwareSerial line, but there are some issues with the rest of the code, one of which is likely to affect your Blynk connection…
Your SerialAT connection is being used for the connection to Blynk:
MRN306:
TinyGsm modem(SerialAT) ;
MRN306:
Blynk.begin(auth, modem , apn, user, pass);
however, as well as being your Tx pin for the SerialAT software UART, it’s aso being uised here:
MRN306:
const int Pin5 = 5 ;
MRN306:
pinMode(Pin5 , OUTPUT);
MRN306:
digitalWrite(Pin5 , LOW);
forcing the Tx pin LOW in this way is going to interfere with the communication between the Nano and the SIM800, most likely causing the connection to be lost.
BTW, you are also initialising the SerialAT port twice:
and of course, you aren’t initialising your gpsSerial
port at all.
Pete.
MRN306
October 23, 2020, 7:59am
5
I tried the new code but the coordinates from the GPS did not appear
I have to comment on this command in order to connect to blynk
//ne06mgps.listen();
#define BLYNK_PRINT Serial // Bagian ini terhubung ke server BLYNK
#define TINY_GSM_MODEM_SIM800 // Agar SIM800L berfungsi
#include <TinyGsmClient.h> // library
#include <BlynkSimpleSIM800.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <RH_ASK.h>
//RH_ASK driver;
const int Pin12 = 12;
const int Pin10 = 10;
const int Pin2 = 2;
const int Pin3= 3;
int x = 0;
char auth[] = "3NC7a1Gz_jfIKnoLNAp28fSE1FCOovkF";
char apn[] = "indosatooredoo.com";
char user[] = "";
char pass[] = "";
SoftwareSerial SerialAT(4, 5); // RX, TX
WidgetMap myMap(V4);
TinyGsm modem(SerialAT);
int GPSBaud = 9600;
SoftwareSerial ne06mgps(6, 7);
TinyGPSPlus gps;
BlynkTimer timer;
int d=0;
int counter=0;
void setup()
{ pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin12, OUTPUT);
pinMode(Pin10, OUTPUT);
digitalWrite(Pin3, HIGH);
Serial.begin(9600);
ne06mgps.begin(9600);
delay(10);
// if (!driver.init())
{ Serial.println("init failed");}
SerialAT.begin(9600);
delay(10);
Blynk.begin(auth, modem, apn, user, pass);
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{ Blynk.run();
timer.run();
}
void myTimerEvent()
{
rf();
checkBlynk();
location1();
}
void location1()
{
//if (gps.location.isValid()){
ne06mgps.listen();
while (ne06mgps.available() > 0)
if (gps.encode(ne06mgps.read()))
{
float latitud = (gps.location.lat());
float longitud = (gps.location.lng());
Serial.print("latitud: ");
Serial.println(latitud, 6);
Serial.print("longitud: ");
Serial.println(longitud, 6);
ne06mgps.end();
SerialAT.listen();
myMap.location(1, gps.location.lat(), gps.location.lng(), "location");
SerialAT.end();
}
delay(100);
}
//}
void checkBlynk()
{
bool isconnected = Blynk.connected();
if (isconnected == true){
digitalWrite(Pin10, HIGH);
delay(50);
digitalWrite(Pin10, LOW);
delay(500);
}
else if (isconnected == false){
d++;
delay(1000) ;
}
if(d > 2){
Blynk.begin(auth, modem, apn, user, pass);
Serial.println("connected");
d=0;
}
}
void rf()
{
uint8_t buf[1];
uint8_t buflen = sizeof(buf);
// if (driver.recv(buf, &buflen))
{
Serial.println((char*)buf);
if (buf[0] == '1')
{ x = 0;
digitalWrite(Pin12, HIGH);
digitalWrite(Pin10, LOW);
digitalWrite(Pin2, LOW);
delay(100);
}
else if (buf[0] == '2')
{ x = 0;
digitalWrite(Pin3, LOW);
delay(100);
}
}
digitalWrite(Pin12, LOW );
if (Pin12 != HIGH )
{
x++;
delay(1000);
if (x == 5)
{
//digitalWrite(Pin2, HIGH);
digitalWrite(Pin10, HIGH);
delay(1000);
call();
x = 0;
}
}
}
void call()
{
Serial.println("ok");
Blynk.notify("ALARM");
counter++;
counter=0;
}
marino
Did you read my comment about your use of pin 5?
Pete.
MRN306
October 23, 2020, 8:13am
7
sorry my fault.
I’ve tried changing d5 to d2 but when I uncomment this command
//ne06mgps.listen();
remains problematic
16:12:31.817 -> [116] Modem init...
16:12:31.965 -> [339] Connecting to network...
16:12:32.069 -> [431] Network: INDOSAT
16:12:32.103 -> [431] Connecting to indosatooredoo.com ...
16:12:37.089 -> [5457] Connected to GPRS
16:12:37.158 -> [5529] Connecting to blynk-cloud.com:80
16:12:38.396 -> [6752] Ready (ping: 550ms).
16:12:39.806 -> ⸮
16:12:50.626 -> ⸮
16:12:53.785 -> [22078] Connecting to blynk-cloud.com:80
marino
But you’re already using pin 2 for something else!
Pete.
MRN306
October 23, 2020, 9:19am
11
i use pin 2 for buzzer
I changed it from pin 5 to pin 2
You’ve totally lost me with this.
You have the hardware in front of you, and you should be able to see how you’ve wired everything up.
I’d suggest that you check this against what you have declared in your code and ensure that each pin is only being used for one thing, and that you have no pinMode declarations for pins that are being used for SoftwareSerial.
Pete.
MRN306
October 23, 2020, 9:27am
13
i have checked pin 6,7 for gps.
pin 5,4 for sim 800.
pin 3 for relay.
and pin 2 for the buzzer
marino