Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Загрузка данных с датчиков в интернет

Ср сен 14, 2022 11:13:06

Попробовал загружать данные в сервис ThingSpeak. Ну вроде все хорошо если не сильно придираться.

Но вот у меня допустить довольно быстро меняющиеся данные, а пока они дойдут до ThingSpeak посредством wifi или gprs дата их публикации уже теряет актупльность.

Нагуглил здесь https://www.mathworks.com/matlabcentral ... peak-field
вот это

Here is an example feed from your channel: "created_at": "2021-06-11T23:09:43-04:00", "entry_id": 96, "field1": "30.56", "field2": "313", "field3": "0.586"

т.е можно указывать время публикации записи created_at. Это вроде как решает проблему, но... Допустим данные я снимаю 2 раза/сек. А отправляются они очень долго. Т.е получается какая-то очередь получиться на отправку.

Правильно ли будет , писать данные скажем в файл или в ЕЕПРОМ, а потом уже оттуда их забирать и неспешно постить на веб сервис.

Re: ThingSpeak загрузка данных

Ср сен 14, 2022 14:03:38

ну тебя понесло...)) совсем не туда... ))
olegue писал(а):А отправляются они очень долго.

сколько ?
olegue писал(а):Правильно ли будет , писать данные скажем в файл или в ЕЕПРОМ, а потом уже оттуда их забирать и неспешно постить на веб сервис.

Вообще-то ЕЕПРОМ для хранения данных при отключении питания...
для временного хранения данных есть SRAM...
:roll:
храни данные на своём ПК... а потом отправляй в облако... или куда хочешь... если сильно надо))
:tea:

Re: ThingSpeak загрузка данных

Чт сен 15, 2022 00:14:10

вроде нормально уходит

2022.09.15 00:04:37; SIMCOM_MODULE; 21.94
2022.09.15 00:04:41; SIMCOM_MODULE; 21.88
2022.09.15 00:04:46; SIMCOM_MODULE; 22.00
2022.09.15 00:04:51; SIMCOM_MODULE; 22.00
2022.09.15 00:04:56; SIMCOM_MODULE; 22.00
2022.09.15 00:05:00; SIMCOM_MODULE; 22.00
2022.09.15 00:05:05; SIMCOM_MODULE; 22.00
2022.09.15 00:05:10; SIMCOM_MODULE; 22.06
2022.09.15 00:05:15; SIMCOM_MODULE; 22.13
2022.09.15 00:05:20; SIMCOM_MODULE; 22.13
2022.09.15 00:05:24; ; SIMCOM_MODULE; 22.13
2022.09.15 00:05:29; SIMCOM_MODULE; 22.19
2022.09.15 00:05:34; SIMCOM_MODULE; 22.25
2022.09.15 00:05:39; SIMCOM_MODULE; 22.31
2022.09.15 00:05:43; SIMCOM_MODULE; 22.31

5 сек на отправку, годится.

Re: ThingSpeak загрузка данных

Чт сен 15, 2022 16:22:52

5 сек на отправку, годится.

сервер перегрузишь))

так а что это будет ?))

Re: ThingSpeak загрузка данных

Пн сен 19, 2022 23:06:31

roman.com, не понял, поясните!

Добавлено after 5 hours 7 minutes 34 seconds:
Вообще-то ЕЕПРОМ для хранения данных при отключении питания...
для временного хранения данных есть SRAM...
:roll:
храни данные на своём ПК... а потом отправляй в облако... или куда хочешь... если сильно надо))
:tea:


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

Добавлено after 2 hours 21 minute 36 seconds:
Что то не выкупаю. Вот три значения типа int и вроде как они должны занимать 2байта
в программе

Код:
#include <EEPROM.h>                       // Импортируем бмблиотеку

int address = 0;                          // Переменная для хранения адреса
int value1 = 4587;                        // Переменная для хранения значения 1
int value2 = -25214;                      // Переменная для хранения значения 2
int value3 = 2    ;                      // Переменная для хранения значения 2
void setup() {
  Serial.begin(9600);
Serial.println("Следующее значение будет записано по адресу: " + String(address));

  EEPROM.put(address, value1);            // Записать значение value1 в ячейку с адресом 0

  // Для вычисления следующего доступного адреса, необходимо получить объем памяти,
  // отведенной под предыдущее значение:
  address += sizeof(int);                 // Корректируем адрес на уже записанное значение - 2 байта занимает тип int
  Serial.println("Следующее значение будет записано по адресу: " + String(address));

  EEPROM.put(address, value2);            // Записать значение value2 в ячейку с адресом 2

    address += sizeof(int);                 // Корректируем адрес на уже записанное значение - 2 байта занимает тип int
  Serial.println("Следующее значение будет записано по адресу: " + String(address));

  EEPROM.put(address, value3);            // Записать значение value2 в ячейку с адресом 2


  // Обнуляем переменные для чистоты экперимента
  address = 0;
  int value1 = 0;
  int value2 = 0;

  // Получаем данные из EEPROM
  EEPROM.get(address, value1);
  address += sizeof(int);                 // Корректируем адрес на уже записанное значение
  EEPROM.get(address, value2);
   address += sizeof(int);                 // Корректируем адрес на уже записанное значение
  EEPROM.get(address, value3);
  Serial.println( value1, BIN);           // Вывести полученное значение 1
  Serial.println( value2, BIN);           // Вывести полученное значение 2
 Serial.println( value3, BIN);           // Вывести полученное значение 2

   Serial.println( value1, DEC);           // Вывести полученное значение 1
  Serial.println( value2, DEC);           // Вывести полученное значение 2
   Serial.println( value3, DEC);           // Вывести полученное значение 2

}

void loop() {}





22:02:19.842 -> Следующее значение будет записано по адресу: 0
22:02:19.910 -> Следующее значение будет записано по адресу: 2
22:02:20.013 -> Следующее значение будет записано по адресу: 4
22:02:20.116 -> 1000111101011
22:02:20.116 -> 11111111111111111001110110000010
22:02:20.150 -> 10
22:02:20.150 -> 4587
22:02:20.150 -> -25214
22:02:20.150 -> 2

почему число -25214 представлено в виде 1111111111111111 1001110110000010 как будто оно занимает 4 бита


если перевести -25214 то будет -110001001111110 в бин

тут переводил

https://www.rapidtables.com/convert/num ... inary.html



Добавлено after 8 minutes 16 seconds:
В переменных типа int отрицательные числа представляются с помощью техники дополнительного кода. Старший бит, который иногда называют "знаковым битом", указывает на то, является ли данное число отрицательным. Остальные биты инвертируются, после чего к результату добавляется 1.


Ну да, все понятно. Только почему оно в таком виде преставлено после

Serial.println( value3, BIN);

Откуда эти 1111111111111111 впереди. Их же в реальности нет?

Добавлено after 41 minute 59 seconds:
Изображение

ну в принципе разобрался, отрицательные хранятся непойммиий как, но занимают 2 байт. Но это уже детали.

Re: ThingSpeak загрузка данных

Пн сен 19, 2022 23:38:05

olegue писал(а):SRAM не подойдет, иногда (или почти всегда) чтобы решить проблему со связь приходится отключать питание.

:o
что у тебя за связь такая...
:facepalm:

сделай себе шпаргалку))

единица в начале означает что число с минусом...

//long 0...2.147.483.647 |-2.147.483.647...-1
//long 0...7f.ff.ff.ff| 80.00.00.00...ff ff ff ff

//int 0...32.767|-32.767...-1
//int 0...7f.ff| 80.00...ff ff

//char 0...127|-127...-1
//char 0...7f| 80...ff

и т.д.
:roll:

выкинь свою библиотеку...
#include <EEPROM.h> // Импортируем бмблиотеку
и пиши по нормальному... через регистры... AVR ))

допустим надо записать массив в EEPROM... и прочитать EEPROM в массив...

unsigned char x; // x - счёт
unsigned char E_int[128]={}; // E_int[128] - массив

//запись EEPROM:
for (x=0;x<128;x++) {
EEAR = x; // адрес
EEDR = E_int[x]; // дата
EECR |= 0b00000100; // разрешение записи EEPROM
EECR |= 0b00000010; // запись EEPROM
while(EECR & 0b00000010); // ждём окончания записи EEPROM
};

//чтение EEPROM:
for (x=0;x<128;x++) {
EEAR = x; // адрес
EECR |= 0b00000001; // чтение EEPROM
E_int[x]=EEDR; // дата
};

что сложного ?
:)

и никаких глюков))
:tea:

Re: ThingSpeak загрузка данных

Вт сен 20, 2022 00:14:26

Допустим данные я снимаю 2 раза/сек.
Какой у Вас тип аккаунта на этом сервисе. От этого зависит ограничение на период отсылки данных.
ss.jpg
(76.29 KiB) Скачиваний: 43

Re: ThingSpeak загрузка данных

Вт сен 20, 2022 00:44:36

почему число -25214 представлено в виде 1111111111111111 1001110110000010 как будто оно занимает 4 бита


если перевести -25214 то будет -110001001111110 в бин

тут переводил

https://www.rapidtables.com/convert/num ... inary.html

1.
открываем калькулятор на ПК... Windows...
1.jpg
(40.45 KiB) Скачиваний: 40

2.
переключаем калькулятор в режим "программист" (вид > программист) 4 байта.
2.jpg
(50.08 KiB) Скачиваний: 42

3.
копируем число -25214 в калькулятор
3.jpg
(74.25 KiB) Скачиваний: 39

4.
нажимаем кнопочку BIN... калькулятор переводит число -25214 (DEC) в 4 байта 11111111 11111111 10011101 10000010 (BIN)
4.jpg
(73.43 KiB) Скачиваний: 39

5.
можно перевести в HEX ))
5.jpg
(74.4 KiB) Скачиваний: 37

калькулятор на ПК... Windows... всё умеет ))
:tea:
Что то не выкупаю. Вот три значения типа int и вроде как они должны занимать 2байта

а во всяких виртуальных машинах (типа Java) вот так:

//long 0...9.223.372.036.854.775.807|-9.223.372.036.854.775.808...-1
//long 0...7f ff ff ff ff ff ff ff | 80 00 00 00 00 00 00 00...ff ff ff ff ff ff ff ff

//int 0...2.147.483.647 |-2.147.483.647...-1
//int 0...7f.ff.ff.ff| 80 00 00 00...ff ff ff ff

//byte 0...127|-127...-1
//byte 0...7f| 80...ff

как видим в программах написанных для ПК... переменная int занимает 4 байта.

вывод:
среду разработки Ардуино... писали программисты ПК... ))
:)

Re: ThingSpeak загрузка данных

Вт сен 20, 2022 13:29:29

Допустим данные я снимаю 2 раза/сек.
Какой у Вас тип аккаунта на этом сервисе. От этого зависит ограничение на период отсылки данных.
ss.jpg



Поднял у себя php сервер на IIS, вкину в goole chart, благо что есть наработки. Не надо писать с нуля.

спасибо за скрин.
Внезапно ThingSpeak перестал принимать данные, хотя я отправлял то всгео 1раз/2минуты
Я от него отказался даже не выясняя в чем проблема

Мало того, передача на ThingSpeak жрет трафик как конь .

Re: ThingSpeak загрузка данных

Вт сен 20, 2022 17:09:51

Внезапно ThingSpeak перестал принимать данные... передача на ThingSpeak жрет трафик как конь .

))
вот я и говорю... свой сервер делать надо.
:tea:

Re: Загрузка данных с датчиков в интернет

Чт сен 22, 2022 13:14:04

есть такой проект в интернете
https://www.rlocman.ru/review/article.html?di=600337

это управление поливом , ну или чем угоддно с web страницы. Данные пишутся (считываются) в файлы на php сервер

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

вот содержимое файла
123456789)

цифры здесь не причем лишь для наглядности, в коде "ищем" скобку, и в зависимости от того куда она загнута управляем.

далее идет код, который это все делает.

Код:
 
loop(){
 ///////// чтение файл на сервере ////////////////////
    /////////////////////////////////////////////
       Serial.print ("Read server \n\r\n");
      adress_txt="pomidor.txt";
       read_gprs();
       for (long i=0; i <= 2000; i++){
       delay(1); 
       read_uart();
       
       if (r!=""){ Serial.print(r);}
       if(r=='+'){aa=1;}
       if(aa==1)
        {
             if(r==0x0D){aa=2;}
        }

        if(aa==2){
      [b]    if(r=='('){aa=0; Serial.print ("ON motor \n\r\n");}
          if(r==')'){aa=0; Serial.print ("OFF motor \n\r\n"); }[/b]
        }
       }

} //loop



Код:
void read_gprs (void)
{
  GSMport.print ("sensor changed to: 0\n\r\n");   
    delay (100);
        GSMport.print ("Send start\n\r\n");   
    delay (100);
        GSMport.print ("setup url\n\r\n");   
    delay (100);
   
GSMport.print ("AT+HTTPPARA=");
GSMport.print ('"');
GSMport.print ("URL");
GSMport.print ('"');
GSMport.print (',');
GSMport.print ('"');
GSMport.print (adress_site);
GSMport.print (adress_txt); 
GSMport.print ('"');
GSMport.print ("\n\r\n");
delay (1000);
GSMport.print ("GET url\n\r\n");   
    delay (100);
    GSMport.print ("AT+HTTPACTION=0\n\r\n");   
    delay (5000);
  GSMport.print ("AT+HTTPREAD=1,1000\n\r\n");   
}
void read_uart (void)
{
  if (GSMport.available()) {
   // Serial.write(mySerial.read());
    r=(GSMport.read());
  }
}


Здесь то что в окне сериала

09:36:16.270 ->
09:36:18.164 -> Read server
09:36:18.164 ->
09:36:24.757 -> sensor changed to: 0
Send start
setup url
AT+HTTPPARA="URL","htAT+HTTPREAD=1,1000

09:36:24.827 -> +HTTPREAD: 9
09:36:24.827 -> 23456789)
09:36:24.827 ->
09:36:24.827 ->
09:36:24.827 -> OK
09:36:24.827 ->
09:36:24.827 ->
09:36:24.862 ->
09:36:24.862 ->
09:36:24.862 ->
09:36:24.862 ->
09:36:24.862 ->
09:36:24.862 ->
09:36:24.862 ->




1. поечему в файле 12345678), а прочитано лишь 23456789), и +HTTPREAD: 9 пишет что 9 байт, хотя в файле их 10
2. зачем вот этот цикл for (long i=0; i <= 2000; i++){. Почему 2000?
3. зачем автор отправляет в GSMport эти строки

Код:
  GSMport.print ("sensor changed to: 0\n\r\n");   
    delay (100);
        GSMport.print ("Send start\n\r\n");   
    delay (100);
        GSMport.print ("setup url\n\r\n");   
    delay (100);


Добавлено after 18 minutes 28 seconds:
пока писал уже немножко разобрался

получается

GSMport.print ("AT+HTTPREAD=1,1000\n\r\n");

это я читаю с 1 байта - 1000 байт (вот откуда гиганского потребление трафика)

мне нужно читать с 0, допусим всего то может 1 байт, но может быть здесь будет еще какая то служебная информация?

надо пробовать

Мне кажется автор где-то стибзил код, сильно не углубляясь.

Добавлено after 3 hours 12 minutes 35 seconds:
тут немножко сам уже разобрался

ловим 0D в ответе

Код:
    if(aa==1){
        if(r==0x0D){aa=2;}
        }

        if(aa==2){
          if(r=='('){aa=0; Serial.print ("ON motor \n\r\n");}
          if(r==')'){aa=0; Serial.print ("OFF motor \n\r\n");
        }


а для этого нужно запросить не мнее 100 байт

GSMport.print ("AT+HTTPREAD=0,100\n\r\n");

В чем суть этого и надо ли делать именно так нужно гуглить

Re: Загрузка данных с датчиков в интернет

Пт сен 23, 2022 12:56:23

php сервер...
GPRS...
...
:shock:
всё что ты написал... никто повторить не сможет))

всё это делается намного проще...
:tea:

Re: Загрузка данных с датчиков в интернет

Сб сен 24, 2022 11:47:07

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

roman.com писал(а):всё это делается намного проще..

договаривайте уже раз начали.

Есть кстати готовые приложения для умного дома типа Blynk
либо вот это
https://arduinoplus.ru/kontroliruem-lam ... -internet/
или вот такой конструкото , то же можено все очнеь быстро настроить


MIT App Inventor
http://ai2.appinventor.mit.edu/#6042682150223872

Re: Загрузка данных с датчиков в интернет

Вс сен 25, 2022 20:07:34

php, ajax,... делали в прошлый раз...
модули.jpg
(146.4 KiB) Скачиваний: 37

дом.jpg
(166.29 KiB) Скачиваний: 34

дом_2.jpg
(196.83 KiB) Скачиваний: 32

и т.д.
больше php, ajax,... не используем)) перешли на более современные технологии))

сейчас делаю это...
схема_1.jpg
(196.87 KiB) Скачиваний: 36

главная сложность - ethernet модули...
:roll:
а где у тебя шифрование ? HTTPS ?
:tea:
Ответить