• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Запрос примеров для Sming

JustACat

Moderator
Команда форума
Предлагаю в данную тему помещать ваши запросы примеров, которые бы вы хотели видеть в Sming.
Вопросы по использованию каких-либо функций, библиотек и т.п. - тоже в эту тему.

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

Не забывайте, пример - это не полноценная прошивка.
Если вам необходимо решение какой-либо вашей личной частной задачи (тем более, если вы собираетесь использовать это решение в коммерческих целях), не стоит запрашивать это решение в качестве примера к Sming. Обратитесь в отдельной теме с описанием вашей задачи, напишите ТЗ, предложите (по возможности) вознаграждение.
Пожалуйста, цените чужое время не меньше своего. Спасибо!

Внимание: оффтоп будет удаляться, пожалуйста, придерживайтесь темы! Спасибо!
 
Последнее редактирование:
Пожскажите пожалуйста,каким образом установить статический IP в режиме wifi.station?В режиме AP понятно,в примерах есть.Думаю как то так:
Код:
ip_addr ip;
ip_addr netmask;
ip_addr gw;
IP4_ADDR(&ip, 192, 168, 1, 100,&netmask,255.255.255.0&gw,192.168.1.1);
WifiStation.setIP(ip,netmask,gw);
Поправьте пожалуйста
 

JustACat

Moderator
Команда форума
Климатехник, вообще должно быть так же, как и для режима AP:
Код:
    ip_addr ip;
    IP4_ADDR(&ip, 192, 168, 2, 1);
    WifiAccessPoint.setIP(ip);
То есть получается так:
Код:
    ip_addr ip;
    IP4_ADDR(&ip, 192, 168, 2, 1);
    WifiStation.setIP(ip);
Но вот если мы посмотрим в текущую реализацию Station в Sming, то увидим вот тут:
https://github.com/anakod/Sming/blob/master/Sming/SmingCore/Platform/Station.h
Что в классе StationClass метод setIP закомменчен. То есть он не реализован.
То есть я делаю вывод, что на данный момент для режима Station в Sming поддерживается только получение IP адреса от роутера по DHCP.

А вот для режима AP он вполне себе реализован:
https://github.com/anakod/Sming/blob/master/Sming/SmingCore/Platform/AccessPoint.h
И тут вот реализация:
https://github.com/anakod/Sming/blob/master/Sming/SmingCore/Platform/AccessPoint.cpp

Если интересно, то IP4_ADDR - это всего лишь макрос, который объявлен вот тут:
https://github.com/anakod/Sming/blob/master/Sming/system/include/lwip/ip_addr.h
На 139 строке. Это к вопросу о том, как понять, какие и как можно использовать у какого-то макроса и/или функции параметры. Ищете просто изначальное объявление искомого объекта в исходниках, и смотрите, что там может быть.
В данном случае имеем: IP4_ADDR(ipaddr, a,b,c,d)
То есть 5 параметров, и ничего более.

Хотя метод тыка (как у вас) - тоже часто сам использую, и иногда получается :)

@anakod, вы не поможете нам разобраться, пожалуйста, почему нет установки IP в режиме Station? Все же функционал иногда полезный...
 
Последнее редактирование:

FGX

Member
Добрый день. Смотрел примеры, не нашел примера получения данных по УАРТ, конечно может плохо искал но в основном они используется для вывода надписей для отладки. Второй вопрос как отправить данные через TCP на народмон (Формат пакета данных:
[HASHTAG]#MAC[/HASHTAG][[HASHTAG]#NAME[/HASHTAG]][[HASHTAG]#LAT[/HASHTAG]][[HASHTAG]#LNG[/HASHTAG]][[HASHTAG]#ELE[/HASHTAG]]\n
#mac1#value1[[HASHTAG]#time1[/HASHTAG]][[HASHTAG]#name1[/HASHTAG]]\n
##)
Т.е. как подключиться к нему, в примере клиента есть отправка данных через какой-то HTTP запрос- thingSpeak.downloadString("http://api.thingspeak.com/update?key=7XXUJWCWYTMXKN3L&field1=" + String(sensorValue), onDataSent); но это не то.
В общем задача получить данные через УАРТ, найти в них нужные значения и отправить чрез TCP порт на народ мод сформировав нужную строку. Вот сижу туплю, примеров много, а как сделать понять не могу.

И третий вопрос, в примерах использования прерываний нет. Он вообще поддерживает прерывания на ножках или еще какие-то, которыми можно пользоваться из программы пользователя? По сравнению с обычными МК модуль работает не прозрачно. Вот когда идет наша программа он же может ее бросать и уходить в прерывания делать свои дела? Я не пойму как он все успевает и по вайфаю общаться и программу выполнять, он же не многоядерный, если мы напишем типа while(1){} в инициализации на этом работа модуля и станет, правильно? В тоже время void init() выполняется один раз, а где наша функция main? В примерах как то функция к функции блуждает или через таймер или через функции вайфая вызываются наши, а вот так чтобы while(1){и что-то делаем по кругу нельзя? Например,
digitalWrite(LED_PIN, state); //кстати с какой частотой он способен шурудить своими выводами?
state = !state;
}
Как ШИМом управлять, примеров АЦП нет.
А как вы вообще проверяете как работает программа, каждый раз шьете? В эклипс отладка не работает, отладчика нет. Довольно хардкорно получается написание программа под него, т.е. по сравнению с авр студио или микрочип (ну любой обычной среды разработки со всеми плюшками и отладчиками, + в протеусе его нет, все в слепую через отладку по уарту).
 

JustACat

Moderator
Команда форума
не нашел примера получения данных по УАРТ
Так ничем же не отличается от Arduino. Откройте любой пример с их сайта (или скачайте саму ардуино и прямо в ней откройте, там примеров очень много).
Например: http://www.arduino.cc/en/Tutorial/SerialCallResponse - там после подключения есть код:
Код:
void loop()
{
  // if we get a valid byte, read analog ins:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    // read first analog input, divide by 4 to make the range 0-255:
    firstSensor = analogRead(A0)/4;
    // delay 10ms to let the ADC recover:
    delay(10);
    // read second analog input, divide by 4 to make the range 0-255:
    secondSensor = analogRead(1)/4;
    // read  switch, map it to 0 or 255L
    thirdSensor = map(digitalRead(2), 0, 1, 0, 255);
    // send sensor values:
    Serial.write(firstSensor);
    Serial.write(secondSensor);
    Serial.write(thirdSensor);             
  }
}

как отправить данные через TCP на народмон
Примера с TcpClient пока действительно нет. Ну тут у вас два варианта:
- ждать, пока кто-нибудь его напишет
- поразбираться самостоятельно - плясать можно от примера HttpClient - если пройти по объявлению этого класса, то увидите, что он как раз наследуется от TcpClient. А он у нас лежит уже вот тут:
https://github.com/anakod/Sming/blob/master/Sming/SmingCore/Network/TcpClient.h
И там уже вполне можно оценить, какие у него есть методы, и по их названиям определить их функции, ну или копать дальше - в их реализацию, а там и комментарии есть небольшие. В общем, не скажу, что просто, но разобраться можно.

В общем задача получить данные через УАРТ, найти в них нужные значения и отправить чрез TCP порт на народ мод сформировав нужную строку.
Вот и решайте свою задачу, а как решите - поделитесь с сообществом (если конечно не жалко), и тогда следующий решающий будет вам благодарен.
Пока что именно вот такую задачу никто не решил (ну или просто не сообщил об этом, что вероятнее). Увы.

Вот когда идет наша программа он же может ее бросать и уходить в прерывания делать свои дела?
Да.

В тоже время void init() выполняется один раз, а где наша функция main?
А чем вам init() вместо main не угодил? Только тем, что буквы в названии другие?
Или вы может имеете ввиду нечто подобное loop в ардуино реализации?
Так зачем оно тут?
Пример Basic_Blink вроде наглядно показывает: init выполняется после старта (типа setup в ардуино), и в нем вы можете определить какой-то код, который будет дальше выполняться.
В Basic_Blink запускается таймер, на который назначается функция. Вот вам и ваш loop, который при этом, в отличие от while(1){} не блокирует МК намертво и дает ему выполнять остальные задачи (тот же WiFi обрабатывать).
Напишите вместо void blink(){} свою основную функцию, поставьте время в таймере не 1000 ms а меньше (сколько вам надо) и вперед.

кстати с какой частотой он способен шурудить своими выводами?
Ищите на форуме - уже было.

в примерах использования прерываний нет
модуль работает не прозрачно
Как ШИМом управлять, примеров АЦП нет.
Ой, да много чего в примерах нет. Да и в коде не все реализовано, что хотелось бы. Ну вот так. Автор - тоже человек. И он тоже не все успевает. У вас есть свободное время? Помогайте!

А как вы вообще проверяете как работает программа, каждый раз шьете?
Именно так. Либо в голове продумываем. Вот как раз по этому поводу, посмотрите (и пару сообщение до и после). Как говорится - что имеем...

В эклипс отладка не работает, отладчика нет. Довольно хардкорно получается написание программа под него, т.е. по сравнению с авр студио или микрочип (ну любой обычной среды разработки со всеми плюшками и отладчиками, + в протеусе его нет, все в слепую через отладку по уарту).
Прямо подмывает картинку вставить: This is SPARTAAAAA!!!!!! =)))
Вы прямо сравнили, блин, Espressif с Микрочипом и Атмелом :)
Но, многие считают, что и отладка по UART (либо WiFi) - это уже не мало, могло ведь и этого не быть :-Р

PS: кстати, по отладке программ (то есть реальной, через jtag) тут на форуме тоже было. Правда не помню - чем кончилось, но вроде что-то выходило. Мне лень было с этим заморачиваться, мне хватает и UART-отладки (хотя даже jtag где-то валяется).
 
Последнее редактирование:

anakod

Moderator
Команда форума
Пожскажите пожалуйста,каким образом установить статический IP в режиме wifi.station?В режиме AP понятно,в примерах есть.Думаю как то так
Пока не реализовывал, т.к. DHCP обычно прекрасно решает проблему и более гибок. Но раз просите - добавлю.

В общем задача получить данные через УАРТ, найти в них нужные значения
Полностью аналогично Ардуино.

Второй вопрос как отправить данные через TCP на народмон
Если верить документации http://narodmon.ru/#!proto то можно отправлять данные в виде GET запроса, тогда будет полностью аналогично примеру Thingspeak который Вы уже смотрели.

Он вообще поддерживает прерывания на ножках или еще какие-то, которыми можно пользоваться из программы пользователя?
Да, пользовательские прерывания должны устанавливаться и работать аналогично классическому Ардуино (но не AVR).

Как ШИМом управлять
Аналогично Ардуино, analogWrite

По сравнению с обычными МК модуль работает не прозрачно. Вот когда идет наша программа он же может ее бросать и уходить в прерывания делать свои дела? Я не пойму как он все успевает и по вайфаю общаться и программу выполнять, он же не многоядерный, если мы напишем типа while(1){} в инициализации на этом работа модуля и станет, правильно?
Все абсолютно прозрачно. Вы пишите пользовательский код который вызывается по таймеру или при поступлении новых данных (если задаете callback), все остальное время микроконтроллер обслуживает WiFi, TCP стек и множество других вещей.
 
Последнее редактирование модератором:

JustACat

Moderator
Команда форума
Но раз просите - добавлю.
Надо-надо. У DHCP есть пара минусов:
- его может не быть =) ну, отключен, либо еще какие-то причины
- с ним получение IP (то есть по сути выход на рабочий режим) занимает больше времени, и для тестов иногда проще выставить статический IP, а уж потом перейти на DHCP после отладки
то можно отправлять данные в виде GET запроса
Можно, но они очень не рекомендуют. Хотя да, можно и так :)

Но я таки собрался и накидал пробный проект для отсылки по TCP (все оказалось на самом деле довольно просто, если делать, как я написал - пойти внутрь исходников, и глянуть, что там и как).
Так что, @FGX, вот, ловите код:
Код:
#include <user_config.h>
#include <SmingCore/SmingCore.h>

#define MY_SSID "WIFISSID"
#define MY_SSID_PWD "WIFIPASSWORD"
#define NARODM_HOST "narodmon.ru"
#define NARODM_PORT 8283

String mac;
Timer procTimer;
float t1 = -2.5; // just for test

void nmOnCompleted(TcpClient& client, bool successful){
    // debug msg
    debugf("nmOnCompleted");
    debugf("successful: %d", successful);
}

void nmOnReadyToSend(TcpClient& client, TcpConnectionEvent sourceEvent){
    // debug msg
    debugf("nmOnReadyToSend");
    debugf("sourceEvent: %d", sourceEvent);

    if(sourceEvent == eTCE_Connected){
        /* send sensors (3 pieces) data
         * T1 = t1 (temperature)
         * H1 = 8 (humidity)
         * P1 = 712.15 (pressure)
         *
         * after sending we close connection: last parameter = true
         */
        client.sendString("#"+mac+"\n#T1#"+t1+"\n#H1#8\n#P1#712.15\n##", true);
    }
}

bool nmOnReceive(TcpClient& client, pbuf *buf){
    // debug msg
    debugf("nmOnReceive");
    debugf("%s", buf);
}

TcpClient narodMon(nmOnCompleted, nmOnReadyToSend, nmOnReceive);

void sendData(){
    // reading sensors data
    t1 = t1 + 1.39; // just for test

    // connect to narodmon server
    narodMon.connect(NARODM_HOST, NARODM_PORT);
}

// Will be called when WiFi station was connected to AP
void connectOk()
{
    // debug msg
    debugf("I'm CONNECTED to WiFi");

    // Construct mac
    mac = WifiStation.getMAC();
    mac.toUpperCase();
    mac = mac.substring(0,2)+"-"+mac.substring(2,4)+"-"+mac.substring(4,6)+"-"+
            mac.substring(6,8)+"-"+mac.substring(8,10)+"-"+mac.substring(10,12);
    debugf("mac: %s", mac.c_str());

    // narodMon send data "loop"
    procTimer.initializeMs(6 * 60 * 1000, sendData).start(); // every 6 minutes
    // force send first time so not to wait 6 mins after start
    sendData();
}

// Will be called when WiFi station timeout was reached
void connectFail()
{
    debugf("I'm NOT CONNECTED!");
    WifiStation.waitConnection(connectOk, 10, connectFail); // Repeat and check again
}

// Will be called when WiFi hardware and software initialization was finished
void ready()
{
    debugf("READY!");
}

void init()
{
    Serial.begin(115200);
    Serial.systemDebugOutput(true); // Allow debug print to serial
    Serial.println("Hello friendly world! :)");

    // Set system ready callback method
    System.onReady(ready);

    // Soft access point
    WifiAccessPoint.enable(false);

    // Station - WiFi client
    WifiStation.config(MY_SSID, MY_SSID_PWD); // Put you SSID and Password here
    WifiStation.enable(true);

    // Run our method when station was connected to AP (or not connected)
    WifiStation.waitConnection(connectOk, 30, connectFail); // We recommend 20+ seconds at start
}
Этим кодом нужно заменить полностью то, что лежит в файле: C:\Sming\Basic_WiFi\app\application.cpp (ну или где он у вас лежит там).
Писалось на коленке и очень грязно (я нуб реально, особенно если доходит до всяких хитростей, типа работы со строками).
На самом деле собрать mac адрес в виде XX-XX-XX-XX-XX-XX из xxxxxxxxxxxx, который возвращает WifiStation.getMAC(); - для меня заняло времени больше, чем понимание, как работать с TcpClient =)
Я безнадежно испорчен удобствами PHP...
Да, вот так - высокий уровень, ООП, все дела - это легко, а низкий - это я плаваю :) А если бы пришлось собирать по байтам, как в АВР (для экономии, без String), то вообще заколебался бы, наверное... Хотя... Ну не суть.

В общем, у меня этот код отрабатывает (не забудьте сменить логин и пароль к вашему WiFi).

Если интересно, то вот лог работы из Terminal:
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with XXXXXX, channel 1
dhcp client start...
ip:192.168.168.12,mask:255.255.255.0,gw:192.168.168.1
I'm CONNECTED to WiFi

mac: 18-FE-34-XX-XX-XX

connect to: narodmon.ru

DNS record found: narodmon.ru = 94.19.113.221

TcpConnection::connect result:, 0

OnConnected

TCP connected

onReadyToSendData: 0

nmOnReadyToSend

sourceEvent: 0

TCP connection send: 48 (48)

TcpClient request completed

TCP sent: 48

onReadyToSendData: 2

nmOnReadyToSend

sourceEvent: 2

nmOnCompleted

successful: 1

TCP connection closing

-TCP connection

+TCP connection

connect to: narodmon.ru

TcpConnection::connect result:, 0

OnConnected

TCP connected

onReadyToSendData: 0

nmOnReadyToSend

sourceEvent: 0

TCP connection send: 47 (47)

TcpClient request completed

onReadyToSendData: 3

nmOnReadyToSend

sourceEvent: 3

TCP sent: 47

onReadyToSendData: 2

nmOnReadyToSend

sourceEvent: 2

nmOnCompleted

successful: 1

TCP connection closing

-TCP connection

+TCP connection

connect to: narodmon.ru

TcpConnection::connect result:, 0

OnConnected

TCP connected

onReadyToSendData: 0

nmOnReadyToSend

sourceEvent: 0

TCP connection send: 47 (47)

TcpClient request completed

onReadyToSendData: 3

nmOnReadyToSend

sourceEvent: 3

TCP sent: 47

onReadyToSendData: 2

nmOnReadyToSend

sourceEvent: 2

nmOnCompleted

successful: 1

TCP connection closing

-TCP connection
Тут у нас 3 последовательные отправки раз в 6 минут.
Ну и то, что в итоге прилетело на narodmon:
2015-04-12_103449.png

PS: если кто-нибудь это решит в виде примера оформить (типа HttpClient_ThingSpeak, назвать можно TcpClient_NarodMon), а @anakod включит в сборку - то будет вообще здорово :)
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Климатехник, а что конкретно вас интересует? Что такое вообще DHCP (ссылка на вики) и принцип его работы? Тогда тут это оффтоп.
Или как его использовать в Sming? Так никак. Он просто работает и все, можно радоваться :)
Мы сейчас говорим о том, что его пока отключить нельзя для режима Station. Но @anakod пообещал это добавить. Как добавит - так и узнаем.
Думаю, можно прямо по setIP это зацепить. Если вызывает человек setIP - то отключаем DHCP. Хотя тогда еще функцию типа enableDHCP добавить надо, чтобы можно было обратно на DHCP вернуться. Но тут @anakod'у виднее.
 
Или как его использовать в Sming?
Да,именно это хотел спросить.И прошу прощение за оффтоп.Просто не знаю уже,в какой теме спросить:)

Update:
Прошу прощение,вопрос закрыт.Все стало ясно

Update2:
Я думаю что надо добавить пример,хотябы с одной html страницой,с которой можно было бы сделать предварительные настройки ssid,пароль и с настройками IP.Я как раз пытаюсь это сделать сейчас,вроде бы задачка не сложная.То есть,как обычно заходим по ip 192.168.4.1 и уже настраиваем подключение.На примере MeteoControl хорошо все показано,но новичкам там будет трудно разобраться.Вот и было бы не плохо простой пример для настроек.Пока тормоза у меня со статическим IP.
 
Последнее редактирование модератором:

JustACat

Moderator
Команда форума
Климатехник, а HttpServer_Bootstrap не подходит? Там вроде просто все, и самое основное все показано. Я конечно понимаю, что нет предела совершенству, но, имхо, 120 строчек кода можно разобрать :)
Редактируем и загружаем свою страничку вместо той, что грузится с сайта @anakod'а - в нее втыкаем форму с SSID и паролем, например... А по приему этой формы проставляем параметры (там есть обработка приема 1 параметра - включения/выключения светика).
Но я ни в коем разе не против - больше примеров хороших разных - только за!
 
JustACat, нет,вы не думайте,что я прошу кого то написать пример,я просто сделал предложение.Как только пример будет готовый,выложу его сюда.HttpServer_Bootstrap пример испробовал,кстати файлы загружал через локальный сервер с помощью Denwer,очень удобно.
 

FGX

Member
Полностью аналогично Ардуино.
Спасибо, с Ардуино просто не знаком, знаком с обычным С и чистыми МК (АВР в том числе) без надстройки из-за которой не ясно, что там и как работает на самом деле. Поэтому и спросил, я привык, что в мк срабатывает прерывание при приеме данных по УАРТУ и все, а в ардуино я так понял сами сидим и опрашивает УАРТ не пришло ли там чего, а потом считываем, что пришло... В принципе не критично, жить можно. Просто часто идут ссылки на ардуино, что не совсем понятно, программа то на С и под эклипсом, причем тут ардуино, хотя я так понял тут использованы готовые портированные библиотеки от ардуино потому что их много готовых..
 

anakod

Moderator
Команда форума
JustACat, это реально круто! Не хотите ли сделать pull-request с новым примером в основной репозиторий на гитхабе?

Чем больше примеров тем проще будет новичкам!
 
Последнее редактирование:
Что то не нашел,или плохо искал функцию restatrt модуля.Надо бы еще подумать,чтобы загружать web файлы,сконвертируемые на bin файлы,по определенному адресу,конвертером который предложил pvvx.Не понятно еще,как происходит сканирование точек доступа
 
Последнее редактирование:

anakod

Moderator
Команда форума
Надо бы еще подумать,чтобы загружать web файлы,сконвертируемые на bin файлы,по определенному адресу,конвертером который предложил pvvx
Это невозможно, тут другой формат и файловая система здесь перезаписываемая (read-write). Можно пробовать spiffy из LUA мира, она должна подойти, но пока вроде никто еще не тестировал.

Не понятно еще,как происходит сканирование точек доступа
А в чем вопрос? Примеры по работе с сетями есть в семле Basic_WiFi
 

JustACat

Moderator
Команда форума
это реально круто! Не хотите ли сделать pull-request с новым примером в основной репозиторий на гитхабе?
Ой да ладно вам :) Перехвалите. По поводу подгрузки на гитхаб - я б сделал, если б им пользовался. А так надо еще сначала с этим разобраться, ибо покамест с гитхаба я все только качал и то обычно одним архивом :) (это не к вам вопрос и вообще не вопрос, понятно, что это не должно быть сложно, нужно просто время на это найти, если, пока я собираюсь, никто не сделает, то закину конечно)
 

FGX

Member
Добрый день. Появилось время проверил и доработал пример JustACat под свое устройство, теперь принимает по ком порту строку с двумя температурами, вынимает из нее непосредственно значения и отправляет на народмон, вроде работает 1 день. Вдруг у кого-то тоже есть погодная станция, которая выдает значение температуры через ком порт и его можно без переделки подружить с интернетом, посылка должна содержать "="и далее значение и значек градуса, второе "=" и второе значение, если значений больше, то не сложно модифицировать код до нужного. Может кто и более красивый парсинг нарисует, но этот рабочий.
Код:
#include <user_config.h>
#include <SmingCore/SmingCore.h>
#define MY_SSID "SSID"
#define MY_SSID_PWD "PASWORD"
#define NARODM_HOST "narodmon.ru"
#define NARODM_PORT 8283
char buf[100], T1[5], T2[5];
String mac ;
Timer procTimer, myTimer;

void nmOnCompleted(TcpClient& client, bool successful){
    debugf("nmOnCompleted");
    debugf("successful: %d", successful);
}
void nmOnReadyToSend(TcpClient& client, TcpConnectionEvent sourceEvent){
    debugf("nmOnReadyToSend");
    debugf("sourceEvent: %d", sourceEvent);
    if(sourceEvent == eTCE_Connected){
        client.sendString("#"+mac+"#Name#41.251418#34.687841\n#T1#"+T1+"#Home\n#T2#"+T2+"#Street\n##\n", true);
    }
}
bool nmOnReceive(TcpClient& client, pbuf *buf){
    debugf("nmOnReceive");
    debugf("%s", buf);
}
TcpClient narodMon(nmOnCompleted, nmOnReadyToSend, nmOnReceive);
void sendData(){
    narodMon.connect(NARODM_HOST, NARODM_PORT);
}

void Serial_reseiv_Data(){
    int i=0, i2, i3, temp;
    char  temp_buf[10];

      if (Serial.available()){
         while( Serial.available() && (i< 99)) {
            buf[i++] = Serial.read();
         }
         buf[i++]='\0';
//дергаем из строки значения температуры
      i2=0;
      i3=0;
      temp=0;
      while (i3<i) {
          if (buf[i3]=='=') {
                           temp=temp+1;
                            while (((i3+i2)<=i) && (i2<5)) {         i2=i2+1;
                                                                     if (buf[i3+i2]!='°')  temp_buf[i2-1]= buf[i3+i2];
                                                                     else  temp_buf[i2-1]='\0';

                                                             }
                i2=0;
                if (temp==1)  {
                               for (char j=0; j<4; j++) {if (temp_buf[j]!='\0')  T1[j]=temp_buf[j]; else T1[j]='0';}
                              }
                if (temp==2)  {
                               for (char j=0; j<4; j++) {if (temp_buf[j]!='\0')  T2[j]=temp_buf[j]; else T2[j]='0';}
                              }
                          }
                 i3=i3+1;
                             }
    }
}

// Will be called when WiFi station was connected to AP
void connectOk()
{
    debugf("I'm CONNECTED to WiFi");
    // Construct mac
    mac = WifiStation.getMAC();
    mac.toUpperCase();
    mac = mac.substring(0,2)+"-"+mac.substring(2,4)+"-"+mac.substring(4,6)+"-"+
            mac.substring(6,8)+"-"+mac.substring(8,10)+"-"+mac.substring(10,12);
    debugf("mac: %s", mac.c_str());
    // narodMon send data "loop"
    procTimer.initializeMs(60 * 5* 1000, sendData).start(); // every 5 minutes
    myTimer.initializeMs(30 *  1000, Serial_reseiv_Data).start(); // every 30 sec
    // force send first time so not to wait 5 mins after start
    sendData();
}
// Will be called when WiFi station timeout was reached
void connectFail()
{
    debugf("I'm NOT CONNECTED!");
    WifiStation.waitConnection(connectOk, 10, connectFail); // Repeat and check again
}
// Will be called when WiFi hardware and software initialization was finished
void ready()
{
    debugf("READY!");
}
void init()
{
    Serial.begin(500000);
    Serial.systemDebugOutput(true); // Allow debug print to serial
    // Serial.println("0\n\r");
    // Set system ready callback method
    System.onReady(ready);
    // Soft access point
    WifiAccessPoint.enable(false);
    // Station - WiFi client
    WifiStation.config(MY_SSID, MY_SSID_PWD); // Put you SSID and Password here
    WifiStation.enable(true);
    // Run our method when station was connected to AP (or not connected)
    WifiStation.waitConnection(connectOk, 30, connectFail); // We recommend 20+ seconds at start
}
 
Последнее редактирование модератором:
Сверху Снизу