Управление Arduino по TCP/IP в рилтайм

toshik-t
Offline
Зарегистрирован: 01.07.2019

Доброго времени суток, Друзья!

Делаю свой проект.

Возникла необходимость в управлении и отслеживании состояния через интернет в рилтайме.

Управление СМС командами отпадает.

Нужно что-то вроде сервера, куда будет подключаться Ардуинка и приложение в смартфоне для контроля и управления.

Как это можно реализовать с помощью GSM/GPRS модуля?

Была идея сначала отправлять СМС, модуль подключается к серваку и в этот момент клиент на андройде можно подключить, но опять же... напрягают СМС, они здесь не в тему.

Собираю на Arduino Nano V3.

Очень буду благодарен за подсказки/ссылки/примеры.

Всем умных идей!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вы в курсе, что TCP/IP - это не реалтайм, по-любому?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DIYMan пишет:

Вы в курсе, что TCP/IP - это не реалтайм, по-любому?

пять секунд это практически реалтайм )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Рилтайм - только на спинах и фотонах.

Morroc
Offline
Зарегистрирован: 24.10.2016

Делал на esp8266 управлялку с мобилы через внешний (бесплатный) mqtt сервер - время реакции в районе секунды, делается достаточно просто. Делал так чтобы не заморачиваться с "пультом" - на смарте есть готовый софт, впомнить бы название... IoTmanager возможно

С обычной ардиуной возни будет больше. (Хотя смотря откуда управлять надо и есть ли белый IP)

toshik-t
Offline
Зарегистрирован: 01.07.2019

Цитата:
DYIMan, Вы в курсе, что TCP/IP - это не реалтайм, по-любому?

Это всяко больше рилтайм чем СМС командами...

toshik-t
Offline
Зарегистрирован: 01.07.2019

Morroc пишет:

Делал на esp8266 управлялку с мобилы через внешний (бесплатный) mqtt сервер - время реакции в районе секунды, делается достаточно просто. Делал так чтобы не заморачиваться с "пультом" - на смарте есть готовый софт, впомнить бы название... IoTmanager возможно

С обычной ардиуной возни будет больше. (Хотя смотря откуда управлять надо и есть ли белый IP)

Вот если возможно с этого момента по подробней.))

Есть белый IP, Есть возможность сделать сервак, только как его сконфигурировать? Может есть какие маны?

Если будет возможность управлять через веб мордочку, то сделать приложение для андрюшки будет не проблема, даже сказал бы это будет наипростейший способ.

Суть вопроса такова.

Есть устройство с кучей датчиков, уже написанным скетчем, управляется в данный момент только по радиоканалу, а это только вкл и выкл. Соответственно уведомления о срабатывании датчиков не приходят никуда.

Подцепил SIM800, настроил управление по СМС, но это ооочень неудобно, особенно для стариков, хоть там и шесть команд всего, но было б проще через приложение на смарте.

Задача:

Замутить связь так, что б зайдя в приложение на смарте человек увидел состояние датчиков, мог включить/выключить датчики, перезапустить систему и прочее...

Вот как это реализовать не прибегая к СМС?

Благодарю.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

toshik-t пишет:

Замутить связь так, что б зайдя в приложение на смарте человек увидел состояние датчиков, мог включить/выключить датчики, перезапустить систему и прочее...

Вот как это реализовать не прибегая к СМС?

Имхо - связка: MQTT + клиент на андроиде, тот же MQTTDash, и всё.

Morroc
Offline
Зарегистрирован: 24.10.2016

toshik-t пишет:

Есть белый IP

С белым проще, я бы попробовал сначала вариант просто http сервера. https://www.arduino.cc/en/Tutorial/WebServer или в поисковике "arduino http server" и прям формировать http страницу для броузера. Ethernet модуль какой к ардуине ?

Если через mqtt, то я с esp8266 использовал облачный бесплатный (для малого числа клиентов) https://www.cloudmqtt.com/

Вот код под esp8266 если интересно. Можно ли его в нано запихать без понятия. Что там где сходу тоже уже смутно помню, но вроде примерно понятно должно быть из текста, если найти исходный вариант - там возможно комментариев больше. Тот mqtt настраивал вроде по этой статье https://habr.com/ru/post/339970/ но интерфейс уже заметно отличается.

/*
 IoT Manager mqtt device client https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager
 Based on Basic MQTT example with Authentication
 PubSubClient library v 1.91.1 https://github.com/Imroy/pubsubclient
  - connects to an MQTT server, providing userdescr and password
  - publishes config to the topic "/IoTmanager/config/deviceID/"
  - subscribes to the topic "/IoTmanager/hello" ("hello" messages from mobile device) 
  Tested with Arduino IDE 1.6.6 + ESP8266 Community Edition v 2.0.0-stable and PubSubClient library v 1.91.1 https://github.com/Imroy/pubsubclient
  ESP8266 Community Edition v 2.0.0-stable have some HTTPS issues. Push notification temporary disabled.
  sketch version : 1.5
  IoT Manager    : any version
  toggle, range, small-badge widgets demo
*/

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

const char *ssid =  "Keenetic-4529";    // cannot be longer than 32 characters!
const char *pass =  "wifipass";       // WiFi password

String prefix   = "/IoTmanager";     // global prefix for all topics - must be some as mobile device
String deviceID = "mich-miners-resetter";   // thing ID - unique device id in our project

WiFiClient wclient;

// config for cloud mqtt broker by DNS hostname ( for example, cloudmqtt.com use: m20.cloudmqtt.com - EU, m11.cloudmqtt.com - USA )
String mqttServerName = "m23.cloudmqtt.com";            // for cloud broker - by hostname, from CloudMQTT account data
int    mqttport = 10469;                                // default 1883, but CloudMQTT.com use other, for example: 13191, 23191 (SSL), 33191 (WebSockets) - use from CloudMQTT account data
String mqttuser =  "miners_resetter_1";                              // from CloudMQTT account data
String mqttpass =  "mqttpass";                              // from CloudMQTT account data
PubSubClient client(wclient, mqttServerName, mqttport); // for cloud broker - by hostname


String val;
String ids = "";
int oldtime, newtime, pushtime;
int newValue;
int ind = HIGH;

const String stat1 = "{\"status\":\"1\"}";
const String stat0 = "{\"status\":\"0\"}";

const int nWidgets = 4;
String stat        [nWidgets];
String sTopic      [nWidgets];
String color       [nWidgets];
String style       [nWidgets];
String badge       [nWidgets];
String widget      [nWidgets];
String descr       [nWidgets];
String page        [nWidgets];
String thing_config[nWidgets];
String id          [nWidgets];
int    pin         [nWidgets];
int    defaultVal  [nWidgets];
bool   inverted    [nWidgets];

// Push notifications
const char* host = "onesignal.com";
WiFiClientSecure httpClient;
const int httpsPort = 443;
String url = "/api/v1/notifications";

void push(String msg) {
  Serial.println("PUSH: try to send push notification...");
  if (ids.length() == 0) {
     Serial.println("PUSH: ids not received, push failed");
     return;
  }
  if (!httpClient.connect(host, httpsPort)) {
     Serial.println("PUSH: connection failed");
     return;
  }
  String data = "{\"app_id\": \"8871958c-5f52-11e5-8f7a-c36f5770ade9\",\"include_player_ids\":[\"" + ids + "\"],\"android_group\":\"IoT Manager\",\"contents\": {\"en\": \"" + msg + "\"}}";
  httpClient.println("POST " + url + " HTTP/1.1");
  httpClient.print("Host:");
  httpClient.println(host);
  httpClient.println("User-Agent: esp8266.Arduino.IoTmanager");
  httpClient.print("Content-Length: ");
  httpClient.println(data.length());
  httpClient.println("Content-Type: application/json");
  httpClient.println("Connection: close");
  httpClient.println();
  httpClient.println(data);
  httpClient.println();
  Serial.println(data);
  Serial.println("PUSH: done.");
}
String setStatus ( String s ) {
  String stat = "{\"status\":\"" + s + "\"}";
  return stat;
}
String setStatus ( int s ) {
  String stat = "{\"status\":\"" + String(s) + "\"}";
  return stat;
}
void initVar() {
  id    [0] = "5";
  page  [0] = "MINER3";
  descr [0] = "MINER3 Reset";
  widget[0] = "toggle";
  pin[0] = 15;                                              // GPIO4 - toggle
  defaultVal[0] = 0;                                       // defaultVal status
  inverted[0] = false;
  sTopic[0]   = prefix + "/" + deviceID + "/miner3_rst";
  color[0]   = "\"color\":\"blue\"";                       // black, blue, green, orange, red, white, yellow (off - grey)
  id    [1] = "6";
  page  [1] = "MINER3";
  descr [1] = "MINER3 Power on/off";
  widget[1] = "toggle";
  pin[1] = 4;                                              // GPIO5 - toggle
  defaultVal[1] = 0;                                       // defaultVal status
  inverted[1] = false;
  sTopic[1] = prefix + "/" + deviceID + "/miner3_pwr";
  color [1] = "\"color\":\"orange\"";                       // black, blue, green, orange, red, white, yellow (off - grey)
  id    [2] = "7";
  page  [2] = "MINER4";
  descr [2] = "MINER4 Reset";
  widget[2] = "toggle";
  pin[2] = 16;                                              // GPIO4 - toggle
  defaultVal[2] = 0;                                       // defaultVal status
  inverted[2] = false;
  sTopic[2]   = prefix + "/" + deviceID + "/miner4_rst";
  color[2]   = "\"color\":\"red\"";                       // black, blue, green, orange, red, white, yellow (off - grey)
  id    [3] = "8";
  page  [3] = "MINER4";
  descr [3] = "MINER4 Power on/off";
  widget[3] = "toggle";
  pin[3] = 13;                                              // GPIO5 - toggle
  defaultVal[3] = 0;                                       // defaultVal status
  inverted[3] = false;
  sTopic[3] = prefix + "/" + deviceID + "/miner4_pwr";
  color [3] = "\"color\":\"green\"";                       // black, blue, green, orange, red, white, yellow (off - grey)
  for (int i = 0; i < nWidgets; i++) {
    if (inverted[i]) {
      if (defaultVal[i]>0) {
         stat[i] = setStatus(0);
      } else {
         stat[i] = setStatus(1);
      }
    } else {
       stat[i] = setStatus(defaultVal[i]);
    }
  }      
  thing_config[0] = "{\"id\":\"" + id[0] + "\",\"page\":\"" + page[0]+"\",\"descr\":\"" + descr[0] + "\",\"widget\":\"" + widget[0] + "\",\"topic\":\"" + sTopic[0] + "\"," + color[0] + "}";   // GPIO switched On/Off by mobile widget toggle
  thing_config[1] = "{\"id\":\"" + id[1] + "\",\"page\":\"" + page[1]+"\",\"descr\":\"" + descr[1] + "\",\"widget\":\"" + widget[1] + "\",\"topic\":\"" + sTopic[1] + "\"," + color[1] + "}";   // GPIO switched On/Off by mobile widget toggle
  thing_config[2] = "{\"id\":\"" + id[2] + "\",\"page\":\"" + page[2]+"\",\"descr\":\"" + descr[2] + "\",\"widget\":\"" + widget[2] + "\",\"topic\":\"" + sTopic[2] + "\"," + color[2] + "}";   // GPIO switched On/Off by mobile widget toggle
  thing_config[3] = "{\"id\":\"" + id[3] + "\",\"page\":\"" + page[3]+"\",\"descr\":\"" + descr[3] + "\",\"widget\":\"" + widget[3] + "\",\"topic\":\"" + sTopic[3] + "\"," + color[3] + "}";   // GPIO switched On/Off by mobile widget toggle
}
// send confirmation
void pubStatus(String t, String payload) {  
    if (client.publish(t + "/status", payload)) { 
       Serial.println("Publish new status for " + t + ", value: " + payload);
    } else {
       Serial.println("Publish new status for " + t + " FAIL!");
    }
}
void pubConfig() {
  bool success;
  success = client.publish(MQTT::Publish(prefix, deviceID).set_qos(1));
  if (success) {
      delay(300);
      for (int i = 0; i < nWidgets; i = i + 1) {
        success = client.publish(MQTT::Publish(prefix + "/" + deviceID + "/config", thing_config[i]).set_qos(1));
        if (success) {
          Serial.println("Publish config: Success (" + thing_config[i] + ")");
        } else {
          Serial.println("Publish config FAIL! ("    + thing_config[i] + ")");
        }
        delay(150);
      }      
  }
  if (success) {
     Serial.println("Publish config: Success");
  } else {
     Serial.println("Publish config: FAIL");
  }
  for (int i = 0; i < nWidgets; i = i + 1) {
      pubStatus(sTopic[i], stat[i]);
      delay(150);
  }      
}


void callback(const MQTT::Publish& sub) {
  digitalWrite(14,HIGH);
  Serial.print("Get data from subscribed topic ");
  Serial.print(sub.topic());
  Serial.print(" => ");
  Serial.println(sub.payload_string());

  if (sub.topic() == sTopic[0] + "/control") {
    if (sub.payload_string() == "0") {
       newValue = 0; // inverted
       stat[0] = stat0;
    } else {
       newValue = 1;
       stat[0] = stat1;
    }
    digitalWrite(pin[0],newValue);
    pubStatus(sTopic[0], stat[0]);
    
 } else if (sub.topic() == sTopic[1] + "/control") {
    if (sub.payload_string() == "0") {
       newValue = 0; // inverted
       stat[1] = stat0;
    } else {
       newValue = 1; // inverted
       stat[1] = stat1;
    }
    digitalWrite(pin[1],newValue);
    pubStatus(sTopic[1], stat[1]);
    
 } else if (sub.topic() == sTopic[2] + "/control") {
    if (sub.payload_string() == "0") {
       newValue = 0; // inverted
       stat[2] = stat0;
    } else {
       newValue = 1; // inverted
       stat[2] = stat1;
    }
    digitalWrite(pin[2],newValue);
    pubStatus(sTopic[2], stat[2]);
    
 } else if (sub.topic() == sTopic[3] + "/control") {
    if (sub.payload_string() == "0") {
       newValue = 0; // inverted
       stat[3] = stat0;
    } else {
       newValue = 1; // inverted
       stat[3] = stat1;
    }
    digitalWrite(pin[3],newValue);
    pubStatus(sTopic[3], stat[3]);
    
 } else if (sub.topic() == prefix + "/ids") {
    ids = sub.payload_string();
 } else if (sub.topic() == prefix) {
    if (sub.payload_string() == "HELLO") {
      pubConfig();
    }
 }
 digitalWrite(14,LOW); 
}

void setup() {
  initVar();
  WiFi.mode(WIFI_STA);
  pinMode(pin[0], OUTPUT);
  digitalWrite(pin[0],defaultVal[0]);
  pinMode(pin[1], OUTPUT);
  digitalWrite(pin[1],defaultVal[1]);
  pinMode(pin[2], OUTPUT);
  digitalWrite(pin[2],defaultVal[2]);
  pinMode(pin[3], OUTPUT);
  digitalWrite(pin[3],defaultVal[3]);

  pinMode(5, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(14, OUTPUT);
  digitalWrite(5,LOW);
  digitalWrite(12,LOW);
  digitalWrite(14,HIGH);
  
  // Setup console
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.println("MQTT client started.");
  Serial.print("Free heap = ");
  Serial.println(ESP.getFreeHeap());
  digitalWrite(14,LOW);
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(5,LOW);
    digitalWrite(12,LOW);
    Serial.print("Connecting via WiFi to ");
    Serial.print(ssid);
    Serial.println("...");

    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED) {
      return;
    }
    
    Serial.println("");
    Serial.println("WiFi connect: Success");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }

  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(5,HIGH);
    if (!client.connected()) {
      digitalWrite(12,LOW);
      Serial.println("Connecting to MQTT server ...");
      bool success;
      if (mqttuser.length() > 0) {
        success = client.connect( MQTT::Connect( deviceID ).set_auth(mqttuser, mqttpass) );
      } else {
        success = client.connect( deviceID );
      }
      if (success) {
        client.set_callback(callback);
        Serial.println("Connect to MQTT server: Success");
        digitalWrite(14,HIGH);
        pubConfig();
        client.subscribe(prefix);                 // for receiving HELLO messages
        client.subscribe(prefix + "/ids");        // for receiving IDS  messages
        client.subscribe(sTopic[0] + "/control"); // for receiving GPIO messages
        client.subscribe(sTopic[1] + "/control"); // for receiving GPIO messages
        client.subscribe(sTopic[2] + "/control"); // for receiving GPIO messages
        client.subscribe(sTopic[3] + "/control"); // for receiving GPIO messages
        digitalWrite(14,LOW);
        digitalWrite(12,HIGH);
        Serial.println("Subscribe: Success");
        
      } else {
        Serial.println("Connect to MQTT server: FAIL");
        digitalWrite(12,LOW);   
        delay(300);
      }
    }

    if (client.connected()) {
      
      newtime = millis();
      if (newtime - oldtime > 1000) { // 10 sec
        //int x = analogRead(pin[3]);
        //val = "{\"status\":\"" + String(x)+ "\"}";
        //client.publish(sTopic[3] + "/status", val );  // widget 3
        oldtime = newtime;
        
        if (ind == HIGH) ind = LOW; else ind = HIGH;
        digitalWrite(14,ind);
        
        //if ((millis()-pushtime > 10000) && (x > 100)) {
        //   String msg = "Kitchen ADC more then 100! (" + String(x) + ")";
           //
           // ESP8266 Community Edition v 2.0.0-stable have some HTTPS issues. Push notification temporary disabled. Please, uncomment next line if you use future versions.
           //
           // push(msg);
           //
           //
       //    pushtime = millis();
       // }
      }
      client.loop();
    }
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Нано треснет от такого количества стрингов.

Morroc
Offline
Зарегистрирован: 24.10.2016

возможно :)

 

С белым ip я бы не парился и делал http сервер, отправляющий готовую страничку с формой управления. У меня просто были уже esp и серверы в wifi сетке без доступа снаружи.

toshik-t
Offline
Зарегистрирован: 01.07.2019

Morroc пишет:
С белым проще, я бы попробовал сначала вариант просто http сервера. https://www.arduino.cc/en/Tutorial/WebServer или в поисковике "arduino http server" и прям формировать http страницу для броузера. Ethernet модуль какой к ардуине ?

В том то и прелесть этой задумки что связь с сервером должна осуществляться посредством GPRS, но никак не Ethernet...

Если через mqtt, то я с esp8266 использовал облачный бесплатный (для малого числа клиентов) https://www.cloudmqtt.com/

Morroc пишет:
Вот код под esp8266 если интересно. Можно ли его в нано запихать без понятия. Что там где сходу тоже уже смутно помню, но вроде примерно понятно должно быть из текста, если найти исходный вариант - там возможно комментариев больше. Тот mqtt настраивал вроде по этой статье https://habr.com/ru/post/339970/ но интерфейс уже заметно отличается.

За код отдельная благодарность, может чего оттуда и вытяну полезного))

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

toshik-t, а сколько данных вы хотите видеть на html страничке устройства, если (образно) несколько checkbox это одно, а если полноценный многостраничный сайт это другой.

Я бы скрестил sim800 и esp32s.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

если нет белого IP можно было бы воспользоваться DDNS, но приходит разочарование, так как халява с DDNS в этом году заканчивается

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ТС, пишет что ip есть, а ddns здесь вообще ни при чем.

Morroc
Offline
Зарегистрирован: 24.10.2016

А на мобиле можно получить постоянный ip или этот белый ip - это ip сервера-посредника будет ?

toshik-t пишет:

связь с сервером должна осуществляться посредством GPRS, но никак не Ethernet...

Погуглил - вроде проблем не должно быть если есть возможность http сервер поднять с белым ip и туда стучаться с этой штуки (надеюсь ip вместо имени модем поймет в AT команде), с mqtt можно обойтись готовым сервером, но кода писать и разбираться с ним дольше как мне кажется (разве что готовый попадется прям под модем).

toshik-t
Offline
Зарегистрирован: 01.07.2019

andycat пишет:
toshik-t, а сколько данных вы хотите видеть на html страничке устройства, если (образно) несколько checkbox это одно, а если полноценный многостраничный сайт это другой.

Я бы скрестил sim800 и esp32s.


Данных не много. Только состояние датчиков.
А управление состоит из шести команд.
За подсказку благодарочка. Поизучаю этот вид скрещивания))

toshik-t
Offline
Зарегистрирован: 01.07.2019

Morroc пишет:

А на мобиле можно получить постоянный ip или этот белый ip - это ip сервера-посредника будет ?

toshik-t пишет:

связь с сервером должна осуществляться посредством GPRS, но никак не Ethernet...

Погуглил - вроде проблем не должно быть если есть возможность http сервер поднять с белым ip и туда стучаться с этой штуки (надеюсь ip вместо имени модем поймет в AT команде), с mqtt можно обойтись готовым сервером, но кода писать и разбираться с ним дольше как мне кажется (разве что готовый попадется прям под модем).


Нет, на мобиле как раз таки динамический адрес. Здесь и затык произошёл...
Тоже гуглил, даже нашёл мануал по командам для поднятия TCP сервера, но на SIM900, и без примеров скетча...

Morroc
Offline
Зарегистрирован: 24.10.2016

Ну не наю... ссылок дофига. Вот например http://www.2150692.ru/faq/62-gprs-svyaz-cherez-sim800

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

toshik-t пишет:
Нет, на мобиле как раз таки динамический адрес. Здесь и затык произошёл...

Поподробней напишите, выше был разговор о белом IP....

На какой мобиле? которая стучиться к устройству с датчиками? или на самом устройстве с датчиками?

Итак: если к вашему устройству можно подключиться с внешнего интернета, т.е. если имеется IP адрес, с которого порты (например 80 HTTP) проброшен к устройству, то все получиться разместив на Arduino или ESP какой либо сервер, хоть HTTP хоть MQTT, можно даже свое что то написать..... В противном случае  без промежуточного сервера, принимающего данные/запросы от железки и/или от мобильника наблюдения, не получиться.

Если всего несколько датчиков мониторить то мощности Arduino Nano для формирования примитивной HTML странички вполне достаточно.

toshik-t
Offline
Зарегистрирован: 01.07.2019

andycat пишет:

toshik-t пишет:
Нет, на мобиле как раз таки динамический адрес. Здесь и затык произошёл...

Поподробней напишите, выше был разговор о белом IP....

На какой мобиле? которая стучиться к устройству с датчиками? или на самом устройстве с датчиками?

К сожалению не на мобиле, а на удалённом сервере. 

andycat пишет:

Итак: если к вашему устройству можно подключиться с внешнего интернета, т.е. если имеется IP адрес, с которого порты (например 80 HTTP) проброшен к устройству, то все получиться разместив на Arduino или ESP какой либо сервер, хоть HTTP хоть MQTT, можно даже свое что то написать..... В противном случае  без промежуточного сервера, принимающего данные/запросы от железки и/или от мобильника наблюдения, не получиться.

Если всего несколько датчиков мониторить то мощности Arduino Nano для формирования примитивной HTML странички вполне достаточно.

Это понятно, но если например не заморачиваться с белым айпи, а построить сеть типа "удалённый клиент с датчиками" <=> "сервер в интернет" <=> "клиент на андройд"?

Такое можно реализовать?

toshik-t
Offline
Зарегистрирован: 01.07.2019

Morroc пишет:

Ну не наю... ссылок дофига. Вот например http://www.2150692.ru/faq/62-gprs-svyaz-cherez-sim800

Да! Это похоже что надо. Теперь буду разбираться со скетчем и процедурами обмена динамическими данными между ардуинкой и сервером.

По сути мне надо читать и писать в базу данных, расположенную на серваке в инете.

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

toshik-t пишет:

Это понятно, но если например не заморачиваться с белым айпи, а построить сеть типа "удалённый клиент с датчиками" <=> "сервер в интернет" <=> "клиент на андройд"?

Такое можно реализовать?

Повторюсь: MQTT. Есть готовые клиенты под андроид, например, MQTT Dash.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017
inspiritus
Offline
Зарегистрирован: 17.12.2012

У меня есть поднятый на белом IP на меге сервер , в него стучатся модули на еспишках ( пока до 54 штук), а сам сервер хранит на sd все полученное, отдает объединенную вэб страницу и посуточные логи.

единственная узкость - большие массивы структур - нватка оперативы. Преодолимо переходом на дуэ.

Morroc
Offline
Зарегистрирован: 24.10.2016

toshik-t пишет:

Это понятно, но если например не заморачиваться с белым айпи, а построить сеть типа "удалённый клиент с датчиками" <=> "сервер в интернет" <=> "клиент на андройд"?

Такое можно реализовать?

Ардуина стучиться по http в сервер с белым IP, оставляет данные, забирает команды. Клиент или броузер на андроид стучиться в сервер с белым IP, забирает данные, оставляет команды. Реалтаймовость упирается в частоту опроса. Конечно можно... Даже клиент на андроиде как таковой не нужен, но сервак должен быть с белым IP. (ну или mqtt если не лень разбираться)

ratman
Offline
Зарегистрирован: 11.10.2015

inspiritus пишет:

У меня есть поднятый на белом IP на меге сервер , в него стучатся модули на еспишках ( пока до 54 штук), а сам сервер хранит на sd все полученное, отдает объединенную вэб страницу и посуточные логи.

единственная узкость - большие массивы структур - нватка оперативы. Преодолимо переходом на дуэ.

А если отложить гамак и лыжи, и раскатать сервак под линухом на любом P4 с помойки? Или не спортивно?

toshik-t
Offline
Зарегистрирован: 01.07.2019

ratman пишет:

inspiritus пишет:

У меня есть поднятый на белом IP на меге сервер , в него стучатся модули на еспишках ( пока до 54 штук), а сам сервер хранит на sd все полученное, отдает объединенную вэб страницу и посуточные логи.

единственная узкость - большие массивы структур - нватка оперативы. Преодолимо переходом на дуэ.

А если отложить гамак и лыжи, и раскатать сервак под линухом на любом P4 с помойки? Или не спортивно?

Тоже интересный вариант. Даже есть простенький компик на котором я могу сконфигурить сервак на FreeBSD в минималке без иксов, ибо 4Гб всего памяти на CF.

Надо помозговать...

toshik-t
Offline
Зарегистрирован: 01.07.2019

Morroc пишет:

toshik-t пишет:

Это понятно, но если например не заморачиваться с белым айпи, а построить сеть типа "удалённый клиент с датчиками" <=> "сервер в интернет" <=> "клиент на андройд"?

Такое можно реализовать?

Ардуина стучиться по http в сервер с белым IP, оставляет данные, забирает команды. Клиент или броузер на андроид стучиться в сервер с белым IP, забирает данные, оставляет команды. Реалтаймовость упирается в частоту опроса. Конечно можно... Даже клиент на андроиде как таковой не нужен, но сервак должен быть с белым IP. (ну или mqtt если не лень разбираться)

Да, это похоже на правду.

А частоту постукиваний на сервак уже в скетче задать можно, но тут встанет вопрос об энергосбережении... Ведь не просто так на Нано собираю. Потребление нужно минимальное...

b707
Offline
Зарегистрирован: 26.05.2017

только все эти варианты все дальше и дальше от "риалтайма" :)

toshik-t
Offline
Зарегистрирован: 01.07.2019
toshik-t
Offline
Зарегистрирован: 01.07.2019

DIYMan пишет:

toshik-t пишет:

Это понятно, но если например не заморачиваться с белым айпи, а построить сеть типа "удалённый клиент с датчиками" <=> "сервер в интернет" <=> "клиент на андройд"?

Такое можно реализовать?

Повторюсь: MQTT. Есть готовые клиенты под андроид, например, MQTT Dash.

Изучаю уже этот вариант. Благодарю...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

b707
Offline
Зарегистрирован: 26.05.2017

toshik-t пишет:

тут встанет вопрос об энергосбережении... Ведь не просто так на Нано собираю. Потребление нужно минимальное...

вы такие фразы не пишите, а то смешно очень. Откуда это поверие среди новичков. что у Нано "потребление минимальное"? - точно такое же, как у Уно у нее потребление...

Если вам нужно энергосбережение - про готовые ардуины (в том числе нано) - забудьте. Надо делать плату самостояельно на основе голого МК - потребление будет в сотни раз меньше, чем у Нано

toshik-t
Offline
Зарегистрирован: 01.07.2019

inspiritus пишет:

У меня есть поднятый на белом IP на меге сервер , в него стучатся модули на еспишках ( пока до 54 штук), а сам сервер хранит на sd все полученное, отдает объединенную вэб страницу и посуточные логи.

единственная узкость - большие массивы структур - нватка оперативы. Преодолимо переходом на дуэ.

В моём варианте данных очень даже не много. Всего 3 датчика, но управление 6 команд. Вот надо теперь придумать как организовать PUSH если датчик превышает порог, а так же PUSH на ардуинку что б управлять.

А на чём сервак собран(ПО)? Как организовано? PHP?

toshik-t
Offline
Зарегистрирован: 01.07.2019

BOOM пишет:

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

Убунту тяжеловато для этого процика на котором у меня компик, да и 256Мб ОЗУ маловато будет для Убунты... По сему фря. По крайней мере так мне пока видится...

inspiritus
Offline
Зарегистрирован: 17.12.2012

ratman пишет:

А если отложить гамак и лыжи, и раскатать сервак под линухом на любом P4 с помойки? Или не спортивно?

Нее мне прошшше на кошерном С . Я в линухе не настолько шарю, чтобы пэхэпэшить и мисклить.  Я его только админю почучуть. Есть у меня тут один сервак с мониторингом, поправить могу , починить тоже, а с нуля надо долго вкуривать, на что времени нет. Кстати надо кое что допилить по-готовому. Нужен чел со скиллами в пхп, мискле, хтмл , со знанием технологии аякс для разовых работ по договору.

Пысы. Не гамак и лыжы, а ласты и маску с трубкой :)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

toshik-t пишет:

BOOM пишет:

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

Убунту тяжеловато для этого процика на котором у меня компик, да и 256Мб ОЗУ маловато будет для Убунты... По сему фря. По крайней мере так мне пока видится...

я это к тому, что на 4Гб Вполне, а не всего лишь)))

toshik-t
Offline
Зарегистрирован: 01.07.2019

b707 пишет:

toshik-t пишет:

тут встанет вопрос об энергосбережении... Ведь не просто так на Нано собираю. Потребление нужно минимальное...

вы такие фразы не пишите, а то смешно очень. Откуда это поверие среди новичков. что у Нано "потребление минимальное"? - точно такое же, как у Уно у нее потребление...

Если вам нужно энергосбережение - про готовые ардуины (в том числе нано) - забудьте. Надо делать плату самостояельно на основе голого МК - потребление будет в сотни раз меньше, чем у Нано

Ладно. Когда я писАл про потребу, то опирался на свои знания в радиосвязи, а там, как известно, только при регистрации/перерегистрации в сети оператора сжирается нормально тока.

Нано выбрана из-за размеров в первую очередь, а уже потребление, по сравнению с мегой,  было бонусом...

Сейчас сборка пилотного варианта на ардуино, позже будет вариант с голым микроконтроллером... Это уже в планах...

toshik-t
Offline
Зарегистрирован: 01.07.2019

BOOM пишет:

toshik-t пишет:

BOOM пишет:

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

Убунту тяжеловато для этого процика на котором у меня компик, да и 256Мб ОЗУ маловато будет для Убунты... По сему фря. По крайней мере так мне пока видится...

я это к тому, что на 4Гб Вполне, а не всего лишь)))

Согласен, но есть же ещё факторы помимо объёма памяти диска...

inspiritus
Offline
Зарегистрирован: 17.12.2012

У меня старая бунта вполне себе живет на 4пне с 2гб. Только в LAMP, без оболочки.

sadman41
Offline
Зарегистрирован: 19.10.2016

inspiritus пишет:
Кстати надо кое что допилить по-готовому. Нужен чел со скиллами в пхп, мискле, хтмл , со знанием технологии аякс для разовых работ по договору.

Пысы. Не гамак и лыжы, а ласты и маску с трубкой :)

Мощные скиллы-то нужны?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

toshik-t пишет:

BOOM пишет:

toshik-t пишет:

BOOM пишет:

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

Убунту тяжеловато для этого процика на котором у меня компик, да и 256Мб ОЗУ маловато будет для Убунты... По сему фря. По крайней мере так мне пока видится...

я это к тому, что на 4Гб Вполне, а не всего лишь)))

Согласен, но есть же ещё факторы помимо объёма памяти диска...

я говорил об объёме озу, а не диска....

toshik-t
Offline
Зарегистрирован: 01.07.2019

BOOM пишет:

toshik-t пишет:

BOOM пишет:

toshik-t пишет:

BOOM пишет:

Всего 4Гб? Или фря уже не та или я. У меня на 4Гб пк убунту 18.04 вполне шустро работает. 

Убунту тяжеловато для этого процика на котором у меня компик, да и 256Мб ОЗУ маловато будет для Убунты... По сему фря. По крайней мере так мне пока видится...

я это к тому, что на 4Гб Вполне, а не всего лишь)))

Согласен, но есть же ещё факторы помимо объёма памяти диска...

я говорил об объёме озу, а не диска....

А я про объём диска. Он на Compact Flash 4Gb. А оперы всего 256Мб на DDR1...

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вот таких приложух для телефона https://play.google.com/store/apps/details?id=cc.kostic.GsmContrAll_free&hl=en_US как дерьма за баней.... Неужто никогда не пробовали ?

Morroc
Offline
Зарегистрирован: 24.10.2016

Там вроде по СМС, а автор не хочет.