Android клиент Blynk 2.18.1 (ошибка связи)

Ребят, спасибо за классный продукт!

Обнаружил ошибку, но пока не смог понять чья вина…

  1. Arduino UNO + Ethernet shield W5100
  2. Android 7.0 + Blynk 2.18.1
  3. Local Server Blynk server-0.32.0-java8

Скрипт пока банальный чисто изучаю возможности. Как известно у W5100 имеется слот microSD карточки, повешенный на 4pin. Так вот решил поиграться с примерами сохранения фалов на карте памяти. Всё получилось. Откатился обратно на скейтч Blynk на котором у меня просто читаются датчики и сохраняются в базу. Но огорчился, в приложении Android показывает отсутствие связи с платной UNO. Причем при перезагрузке на долю секунды связи появляется, а потом offline. Помогает только извлечение карты SD.

Код:

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#define BLYNK_DEBUG

#include <SPI.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <SimpleTimer.h>

#define DHTPIN            6         // Pin which is connected to the DHT sensor.
#define DHTTYPE           DHT22     // DHT 22 (AM2302)
#define W5100_CS          10        // Pin вызова Ethernet контроллера
#define SDCARD_CS         4         // Pin вызова SD карты на контроллере

DHT dht8(8, DHTTYPE);
DHT dht7(7, DHTTYPE);
DHT dht6(6, DHTTYPE);
DHT dht5(5, DHTTYPE);
DHT dht4(4, DHTTYPE);

char auth[] = "b3e641bee9a243cbbe41dae526c268f4";

IPAddress server_ip (192, 168, 0, 50);
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xE1 };
IPAddress arduino_ip ( 192, 168,  0, 177);
IPAddress dns_ip     ( 192, 168,  0,  1);
IPAddress gateway_ip ( 192, 168,  0,  1);
IPAddress subnet_mask( 255, 255, 255,  0);

//Определяем объекты таймер для нужных классов
SimpleTimer timerDHT;
SimpleTimer timerPIR;

#define pinPIR 3

void setup()
{
  pinMode(pinPIR, INPUT); // PIR датчик движения
  pinMode(SDCARD_CS, OUTPUT);
  digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card

  Serial.begin(9600);
  Blynk.begin(auth, server_ip, 8442, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);

  dht8.begin();
  dht7.begin();
  dht6.begin();
  dht5.begin();
  dht4.begin();

  timerDHT.setInterval(3700, sendDataDHT);
  timerPIR.setInterval(3800, readDataPIR);

  Blynk.virtualWrite(V31, "<b>ARDUINO:</b> Произведена загрузка и проверка параметров системы.");
}

// Процедуры по каждой среде даных...
void sendDataDHT()
{
  //Читаем значения датчиков DHT температуру и влажность с опредлением типа переменной
  //Пишем значения в виртуальный пины V09 and V10
  float h = dht8.readHumidity();
  float t = dht8.readTemperature();
  Blynk.virtualWrite(V9, t);
  Blynk.virtualWrite(V10, h);
  
  //Пишем значения в виртуальный пины V07 and V08  
  h = dht7.readHumidity();
  t = dht7.readTemperature();
  Blynk.virtualWrite(V7, t);
  Blynk.virtualWrite(V8, h);
  
  //Пишем значения в виртуальный пины V05 and V06
  h = dht6.readHumidity();
  t = dht6.readTemperature();
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
  
  //Пишем значения в виртуальный пины V03 and V04
  h = dht5.readHumidity();
  t = dht5.readTemperature();
  Blynk.virtualWrite(V3, t);
  Blynk.virtualWrite(V4, h);
  
  //Пишем значения в виртуальный пины V01 and V02
  h = dht4.readHumidity();
  t = dht4.readTemperature();
  Blynk.virtualWrite(V1, t);
  Blynk.virtualWrite(V2, h);
}

void readDataPIR()
{
  int vPIR = digitalRead(pinPIR);
  Blynk.virtualWrite(V11, vPIR);
}

BLYNK_CONNECTED() {
  Blynk.syncAll();
}


void loop()
{
  Blynk.run();
  timerDHT.run();
  timerPIR.run();
}

Дальше приведу, что пишет сам скрипт в терминале:

[0] Using static IP
[1300] IP:192.168.0.177
[1300] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.5.0 on Arduino Uno

[1412] Connecting to 192.168.0.50
[6412] Connecting to 192.168.0.50
[11413] Connecting to 192.168.0.50
[16414] Connecting to 192.168.0.50
[21415] Connecting to 192.168.0.50
[26416] Connecting to 192.168.0.50
[31417] Connecting to 192.168.0.50
[31419] <[02|00|01|00] 
[31420] <b3e641bee9a243cbbe41dae526c268f4
[31460] >[00|00|01|00|C8]
[31486] Ready (ping: 27ms).
[31516] Free RAM: 365
[31552] <[11|00|02|00]d
[31566] <ver[00]0.5.0[00]h-beat[00]10[00]buff-in[00]256[00]dev[00]Arduino Uno[00]cpu[00]ATmega328P[00]con[00]W5100[00]build[00]Feb 18 2018 10:55:16[00]
[31727] >[00|00|02|00|C8]
[31793] <[10|00|03|00|00]
[31861] <[14|00|04|00]v

И останавливается, дальше ДАННЫЕ не сыплются…

Лог файл сервера (mode DEBUG) если это поможет. Вроде нет возможности прицепить его к топику, поэтому приведу ссылку https://cloud.mail.ru/public/LVhz/n6iSxCmrZ

P.S. Извиняюсь, если SD карточку извлечь всё работает!

you need:

t1, h1
t2, h2
t3, h4

etc?

Зачем? Я переменную отдал на VPIN и мне она больше не нужна… Проблема как-то связна с 4 PIN-ом.

yeah, nah, I don’t speak russian…

where do you define your DHT pins?

it’s a mess!

which example did you follow?

I recall reading somewhere (ion the web) that using the SD card can cause connection issues with the Ethernet… normally not much of a problem, until you use Blynk or any other IoT type interface that requires constant uncorrupted communication with a server.

You will probably have to experiment with…

  • Disabling Blynk connection
  • Enable SD card
  • Transfer data
  • Disable SD card
  • Enable Blynk connection

Repeat as necessary.

Thanks…

Спасибо. За ответы… особенно за последнее сообщение от Gunner. Blynk клиент тут не причем.
Проблема действительно в модуле W5100, где SD контроллер MIOS контакт ставит в UP, и в SPI голимые единички валятся. А я еще подумал чего DHCP адрес себе не может получить.

Подробнее здесь можно почитать http://arduino.ru/forum/apparatnye-voprosy/w5100-sd-modul-ne-vzletayut-vmeste

1 Like