Hi,
Yes, I tried an non-Blynk Ethernet 2 sketch where I set static IP, MAC address and DNS. That sketch works. I tried to do the same for Blynk.begin(). I changed “blynk.cloud” to actual IP address like you can see in sketch below. Then it seems to connect to server because BLYNK_CONNECTED is triggered in my device. My timers hit at the right intervals, sketch is running, but nothing seems to be sent to server.
23:29:11.645 -> [9999] Using static IP
23:29:13.626 -> [12000] IP:192.168.0.20
23:29:13.660 -> [12001]
23:29:13.660 -> ___ __ __
23:29:13.694 -> / _ )/ /_ _____ / /__
23:29:13.728 -> / _ / / // / _ \/ '_/
23:29:13.728 -> /____/_/\_, /_//_/_/\_\
23:29:13.763 -> /___/ v1.1.0 on Arduino Uno
23:29:13.797 ->
23:29:13.797 -> #StandWithUkraine https://bit.ly/swua
23:29:13.868 ->
23:29:13.868 ->
23:29:13.868 -> [12169] Connecting to 46.101.217.214
23:29:14.039 -> [12421] Ready (ping: 42ms).
23:29:14.215 -> Tog emot och skickade tillbaka nivå:3
23:29:19.171 -> Kör periodisk LED-funktion
23:29:19.238 -> [17601] Connecting to 46.101.217.214
23:29:24.191 -> Kör periodisk LED-funktion
23:29:24.225 -> [22602] Connecting to 46.101.217.214
23:29:29.174 -> Kör periodisk LED-funktion
23:29:29.244 -> [27603] Connecting to 46.101.217.214
23:29:34.175 -> Kör periodisk LED-funktion
23:29:34.246 -> [32604] Connecting to 46.101.217.214
23:29:39.170 -> Kör periodisk LED-funktion
...
...
/*************************************************************
Styrning av värmepump
*************************************************************/
#define BLYNK_PRINT Serial
// Blynk-items
#define BLYNK_TEMPLATE_ID "TMPLQsUn1mZj"
#define BLYNK_DEVICE_NAME "Test"
#define BLYNK_AUTH_TOKEN "Dx3UwvsBNKVtv7dFLIYI-3Ec0mV3IOGo"
#include <SPI.h>
#include <Ethernet2.h>
#include <BlynkSimpleEthernet2.h>
char auth[] = BLYNK_AUTH_TOKEN;
// Mac address should be different for each device in your LAN
byte arduino_mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0xA8, 0xDC };
IPAddress arduino_ip ( 192, 168, 0, 20);
IPAddress dns_ip ( 8, 8, 8, 8);
IPAddress gateway_ip ( 192, 168, 0, 1);
IPAddress subnet_mask(255, 255, 255, 0);
IPAddress ip_s (46,101,217,214);
#define W5100_CS 10
#define SDCARD_CS 4
// Uppstartsfördröjning START_DELAY * 1 s
// Ska sättas till 60 sekunder när systemet är live
// Routern verkar hitta koppling efter cirka 35 sekunder
#define START_DELAY 10
//*************************************************************/
// Används för periodisk koll
BlynkTimer periodicTimer;
// Räknare för antalet checkar mot cloud
// Kör varje minut
// Låt dem nollas vid omstart
unsigned int connected = 0;
unsigned int not_connected = 0;
// Kör noll på den initialt, ska sen synkas vid connect
byte currentLevel = 0;
// Räknare för periodisk timer
int periodicCount = 0;
// Antal minuter - periodtid
const int period = 60;
// Förra samplet, sätt till 11 så att det inte triggar nerstängning
double lastInhouse = 11;
// Virtuella pinnar
// Sätta temperaturnivå : V0
// Visa temperaturnivå : V1
// Hall : V2
// Utomhus : V3
// Vardagsrum : V4
// Uppkoppling stat. : V5
// Kommer om pinne V0 (slider) ändrats eller om det är synkning. Sätt reläer.
BLYNK_WRITE(V0)
{
int tempLevel = param.asInt();
Serial.print("Tog emot och skickade tillbaka nivå:");
Serial.println(tempLevel);
setLevel(tempLevel);
Blynk.virtualWrite(V1, tempLevel);
}
// Synka värdet från server
BLYNK_CONNECTED()
{
Blynk.syncVirtual(V0);
}
// Kör var 10:e sekund
void timerHit()
{
//---------------------------------------------------------------------------------
// Kolla om en period gått, om inte, hoppa ur
periodicCount = periodicCount + 1;
if (periodicCount < period)
{
return;
}
//---------------------------------------------------------------------------------
Serial.println("Kör periodisk funktion");
// Eftersom en period gått, nolla räknaren
periodicCount = 0;
// Börja om ifall räknarna blivit stora
if ( (connected > 65000) || (not_connected > 65000) )
{
connected = 0;
not_connected = 0;
}
else
{
// Kolla om grejerna är uppe
if (Blynk.connected() == true)
{
connected = connected + 1;
}
else
{
not_connected = not_connected + 1;
}
// Undvik nolldivision samt uppdatera procentandel
if ( (connected+not_connected) != 0 )
{
Blynk.virtualWrite(V5, 100*connected/(connected+not_connected));
Serial.print("Connected, not connected och andel:");
Serial.println(connected);
Serial.println(not_connected);
Serial.println(100*connected/(connected+not_connected));
}
}
//---------------------------------------------------------------------------------
// Temperaturer, kör tre mätningar per sensor
double tempHall = calcTemperature(analogRead(0),analogRead(0),analogRead(0));
double tempVardagsrum = calcTemperature(analogRead(1),analogRead(1),analogRead(1));
double tempUte = calcTemperature(analogRead(2),analogRead(2),analogRead(2));
double averageTempIn = (tempHall+tempVardagsrum)/2;
// Uppdatera temperaturer till mobil
Serial.println("Uppdatera temperaturer mot server");
Serial.println(tempHall);
Serial.println(tempVardagsrum);
Serial.println(tempUte);
Blynk.virtualWrite(V2, tempHall);
Blynk.virtualWrite(V4, tempVardagsrum);
Blynk.virtualWrite(V3, tempUte);
Blynk.virtualWrite(V6, averageTempIn);
/* Om senaste och förra mätningen är för låga -> stäng av
if ( (lastInhouse < 10) && (averageTempIn < 10) )
{
setLevel(4);
Blynk.virtualWrite(V1, 4);
lastInhouse = averageTempIn;
}*/
}
//---------------------------------------------------------------------------------
void timerHitLed()
{
digitalWrite(5, HIGH);
delay(40);
digitalWrite(5, LOW);
Serial.println("Kör periodisk LED-funktion");
}
void setup()
{
// Debug console
Serial.begin(9600);
pinMode(2, OUTPUT); // Relä för level 3
pinMode(3, OUTPUT); // Relä för level 2
pinMode(4, OUTPUT); // Relä för level 1
pinMode(5, OUTPUT); // LED
// Använd inte SD-kort
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH);
// Vänta lite, öka chansen att routern vaknat efter strömavbrott
delay(1000*START_DELAY);
// Authentisera mot cloud
//Blynk.begin(auth);
Blynk.begin(auth, ip_s, 80, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
// Periodisk funktion, kör varje minut för att pusha data
periodicTimer.setInterval(60000L, timerHit);
periodicTimer.setInterval(5000L, timerHitLed);
}
void loop()
{
Blynk.run();
periodicTimer.run();
}
// Gör om mätvärde till temperatur
double calcTemperature(int reading1, int reading2, int reading3)
{
// Medelvärde
int reading = (reading1+reading2+reading3)/3;
double Temp;
Temp = log(10000.0 * ((1024.0 / reading - 1)));
Temp = 1 /(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp)) * Temp);
Temp = Temp - 273.15; // convert from Kelvin to Celsius
return Temp;
}
void setLevel(byte value)
{
// Sätt relä direkt
if (value==4)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if (value==3)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if (value==2)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
}
if (value==1)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
}
}