Блок для GPRS модулей, связь по MQTT

Управление и контроль

Создаем свой блок. Вопросы, помощь знатоков.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для GPRS модулей, связь по MQTT

#121

Сообщение starshoy81 » 05.12.2022{, 15:43}

sampl, wemos не прошит

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Блок для GPRS модулей, связь по MQTT

#122

Сообщение Phazz » 05.12.2022{, 15:58}

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

sampl
Сержант
Сообщения: 189
Зарегистрирован: 31.03.2017{, 11:28}
Репутация: 0
Откуда: Днепропетровск

Блок для GPRS модулей, связь по MQTT

#123

Сообщение sampl » 05.12.2022{, 23:15}

starshoy81 писал(а):
05.12.2022{, 15:43}
sampl, wemos не прошит
Та прошит( проэкт приложил но блин не могу до воевать(

Отправлено спустя 1 минуту 27 секунд:
Phazz писал(а):
05.12.2022{, 15:58}
sampl, срабатывает защита от зависания. Вариантов этому много: нехватка памяти, слишком длинный цикл, деление на ноль )
А если можно дайте рабочий проэкт, попробую вашь, но вроде в своём (приложил его) все правельно. (( а то уже сил нет боротся

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для GPRS модулей, связь по MQTT

#124

Сообщение starshoy81 » 06.12.2022{, 16:42}

sampl, в проекте не указан топик куда отправлять данные и проект сделан для нано

sampl
Сержант
Сообщения: 189
Зарегистрирован: 31.03.2017{, 11:28}
Репутация: 0
Откуда: Днепропетровск

Блок для GPRS модулей, связь по MQTT

#125

Сообщение sampl » 06.12.2022{, 18:30}

starshoy81 писал(а):
06.12.2022{, 16:42}
sampl, в проекте не указан топик куда отправлять данные и проект сделан для нано
Ок спс попробую, но просто смущает то что нет даже попытки подключения к брокеру(((((

Отправлено спустя 2 часа 2 минуты 34 секунды:
подскажите еще, при компиляции пишет что нет библиотеки avrwdt.h, как ее установить, или можно просто вырезать ее я так понимаю она не очень нужна, подскажите как с ней быть

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для GPRS модулей, связь по MQTT

#126

Сообщение starshoy81 » 06.12.2022{, 20:57}

sampl, у меня библиотеку не требует. Эта библиотека, видимо, тянется из зависимостей другой библиотеки. Прямой её вставки в коде нет. Можно игнорировать предупреждение.
Ещё надо объявлять тип модема перед вставкой библиотеки модема.

sampl
Сержант
Сообщения: 189
Зарегистрирован: 31.03.2017{, 11:28}
Репутация: 0
Откуда: Днепропетровск

Блок для GPRS модулей, связь по MQTT

#127

Сообщение sampl » 06.12.2022{, 22:19}

starshoy81 писал(а):
06.12.2022{, 20:57}
sampl, у меня библиотеку не требует. Эта библиотека, видимо, тянется из зависимостей другой библиотеки. Прямой её вставки в коде нет. Можно игнорировать предупреждение.
Ещё надо объявлять тип модема перед вставкой библиотеки модема.
Незнаю у меня пишет нет библиотеки, и не могу найти, а если закоментить в коде?
Да я помню, я поднимал строку в начало с типом модэма.
А может есть какой то проверенный проект на wemos d1 mini или nodemcu v3, просто проверить свой модэм чтоб понимать что не так

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для GPRS модулей, связь по MQTT

#128

Сообщение starshoy81 » 06.12.2022{, 22:26}

sampl, код из приложенного проекта. Закомментировать ненужное можно

Код: Выделить всё

#include <OneWire.h>
#include <SoftwareSerial.h>
#include <PubSubClient.h>
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
byte _d18x2x1Addr[8]={0x28, 0x8A, 0x58, 0xEB, 0x5, 0x0, 0x0, 0x78};
OneWire  _ow6(6);

//#define SerialMon Serial
String MQTT_inputTopic;
String MQTT_inputtext;
SoftwareSerial SerialAT(5, 4);
const char apn[]  = "internet";
const char user[] = "";
const char pass[] = "";
const char* topicInit= "GsmClient/init";
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);
long lastReconnectAttempt= 0;
bool En_75656550_1;
String msg_75656550_1;
String outTopic_75656550_1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
float _tempVariable_float;
void setup()
{
    Serial.begin(115200);
    delay(10);
    SerialAT.begin(19200);
    delay(3000);
    Serial.println("Initializing modem...");
    modem.restart();
    // Unlock your SIM card with a PIN
      //modem.simUnlock("1234");
    Serial.print("Waiting for network...");
    if (!modem.waitForNetwork()) 
    {
        Serial.println(" fail");
        while (true);
    }
    Serial.println(" OK");
    Serial.print("Connecting to ");
    Serial.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) 
    {
        Serial.println(" fail");
        while (true);
    }
    Serial.println(" OK");
    // MQTT Broker setup
      mqtt.setServer("m16.cloudmqtt.com", 10816);
    mqtt.setCallback(mqttCallback);
}
void loop()
{
    //Плата:1
    if (mqtt.connected()) 
    {
        mqtt.loop();
    }
    else 
    {
        // Reconnect every 10 seconds
            unsigned long t = millis();
        if (t - lastReconnectAttempt > 10000L) 
        {
            lastReconnectAttempt = t;
        }
        if (mqttConnect()) 
        {
            lastReconnectAttempt = 0;
        }
        else if (!modem.gprsConnect(apn, user, pass)) 
        {
            while (true);
        }
    }
    if (1) 
    {
         if (! _gen1I) 
        {
            _gen1I = 1;
            _gen1O = 1;
            _gen1P = millis();
        }
    }
     else 
    {
        _gen1I = 0 ;
        _gen1O= 0;
    }
    if (_gen1I) 
    {
          if (_isTimer (_gen1P , 180000)) 
        {
             _gen1P = millis();
            _gen1O = ! _gen1O;
        }
    }
    if (_gen1O) 
    {
         if (_trgrt1I) 
        {
             _trgrt1 = 0;
        }
         else 
        {
            _trgrt1 = 1;
            _trgrt1I = 1;
        }
    }
     else 
    {
        _trgrt1 = 0;
        _trgrt1I = 0;
    }
    ;
    if(_isTimer(_d18x2x1Tti, 360000)) 
    {
        _d18x2x1Tti = millis();
        _tempVariable_float =  _readDS18_ow6(_d18x2x1Addr, 0);
        if (_tempVariable_float < 500) 
        {
            _d18x2x1O = _tempVariable_float;
        }
    }
    En_75656550_1 = _trgrt1;
    msg_75656550_1 = (_floatToStringWitRaz((_d18x2x1O),2));
    outTopic_75656550_1 = String("drev");
    if (En_75656550_1 == 1) 
    {
        mqtt.publish((char*) outTopic_75656550_1.c_str(), (char*) msg_75656550_1.c_str());
    }
}
String  _floatToStringWitRaz(float value, int raz)
{
    return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) 
    {
        return (currentTime>=(startTime + period));
    }
     else 
    {
        return (currentTime >=(4294967295-startTime+period));
    }
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s)
    {
        raw = raw << 3;
        if (data[7] == 0x10) 
        {
             raw = (raw & 0xFFF0) + 12 - data[6];
        }
    }
    else
    {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00)raw = raw & ~7;
        else if(cfg == 0x20)raw = raw & ~3;
        else if(cfg == 0x40) raw = raw & ~1;
    }
    return  (float)raw / 16.0;
}
float _readDS18_ow6(byte addr[8], byte type_s)
{
    byte data[12];
    byte i;
    _ow6.reset();
    _ow6.select(addr);
    _ow6.write(0xBE);
    for (i = 0; i < 9; i++) 
    {
         data[i] = _ow6.read();
    }
    _ow6.reset();
    _ow6.select(addr);
    _ow6.write(0x44);
    if (_ow6.crc8(data, 8) != data[8])
    {
        return 501;
    }
    return _convertDS18x2xData(type_s, data);
}
boolean mqttConnect()
{
    Serial.print("Connecting to ");
    Serial.print("m16.cloudmqtt.com");
    if (!mqtt.connect("", "bzcnhecm", "8jdgYxHld-tu")) 
    {
        Serial.println(" fail");
        return false;
    }
    Serial.println(" OK");
    mqtt.publish(topicInit, "GsmClient started");
    mqtt.subscribe("#");
    return mqtt.connected();
}
void mqttCallback(char* topic, byte* payload, unsigned int len)
{
    MQTT_inputtext = "";
    MQTT_inputTopic = "";
    MQTT_inputTopic = topic;
    for (int i=0; i<len; i++) 
    {
        MQTT_inputtext += (char)payload[i];
    }
}

sampl
Сержант
Сообщения: 189
Зарегистрирован: 31.03.2017{, 11:28}
Репутация: 0
Откуда: Днепропетровск

Блок для GPRS модулей, связь по MQTT

#129

Сообщение sampl » 06.12.2022{, 23:29}

starshoy81 писал(а):
06.12.2022{, 22:26}
sampl, код из приложенного проекта. Закомментировать ненужное можно

Код: Выделить всё

#include <OneWire.h>
#include <SoftwareSerial.h>
#include <PubSubClient.h>
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
byte _d18x2x1Addr[8]={0x28, 0x8A, 0x58, 0xEB, 0x5, 0x0, 0x0, 0x78};
OneWire  _ow6(6);

//#define SerialMon Serial
String MQTT_inputTopic;
String MQTT_inputtext;
SoftwareSerial SerialAT(5, 4);
const char apn[]  = "internet";
const char user[] = "";
const char pass[] = "";
const char* topicInit= "GsmClient/init";
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);
long lastReconnectAttempt= 0;
bool En_75656550_1;
String msg_75656550_1;
String outTopic_75656550_1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
float _tempVariable_float;
void setup()
{
    Serial.begin(115200);
    delay(10);
    SerialAT.begin(19200);
    delay(3000);
    Serial.println("Initializing modem...");
    modem.restart();
    // Unlock your SIM card with a PIN
      //modem.simUnlock("1234");
    Serial.print("Waiting for network...");
    if (!modem.waitForNetwork()) 
    {
        Serial.println(" fail");
        while (true);
    }
    Serial.println(" OK");
    Serial.print("Connecting to ");
    Serial.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) 
    {
        Serial.println(" fail");
        while (true);
    }
    Serial.println(" OK");
    // MQTT Broker setup
      mqtt.setServer("m16.cloudmqtt.com", 10816);
    mqtt.setCallback(mqttCallback);
}
void loop()
{
    //Плата:1
    if (mqtt.connected()) 
    {
        mqtt.loop();
    }
    else 
    {
        // Reconnect every 10 seconds
            unsigned long t = millis();
        if (t - lastReconnectAttempt > 10000L) 
        {
            lastReconnectAttempt = t;
        }
        if (mqttConnect()) 
        {
            lastReconnectAttempt = 0;
        }
        else if (!modem.gprsConnect(apn, user, pass)) 
        {
            while (true);
        }
    }
    if (1) 
    {
         if (! _gen1I) 
        {
            _gen1I = 1;
            _gen1O = 1;
            _gen1P = millis();
        }
    }
     else 
    {
        _gen1I = 0 ;
        _gen1O= 0;
    }
    if (_gen1I) 
    {
          if (_isTimer (_gen1P , 180000)) 
        {
             _gen1P = millis();
            _gen1O = ! _gen1O;
        }
    }
    if (_gen1O) 
    {
         if (_trgrt1I) 
        {
             _trgrt1 = 0;
        }
         else 
        {
            _trgrt1 = 1;
            _trgrt1I = 1;
        }
    }
     else 
    {
        _trgrt1 = 0;
        _trgrt1I = 0;
    }
    ;
    if(_isTimer(_d18x2x1Tti, 360000)) 
    {
        _d18x2x1Tti = millis();
        _tempVariable_float =  _readDS18_ow6(_d18x2x1Addr, 0);
        if (_tempVariable_float < 500) 
        {
            _d18x2x1O = _tempVariable_float;
        }
    }
    En_75656550_1 = _trgrt1;
    msg_75656550_1 = (_floatToStringWitRaz((_d18x2x1O),2));
    outTopic_75656550_1 = String("drev");
    if (En_75656550_1 == 1) 
    {
        mqtt.publish((char*) outTopic_75656550_1.c_str(), (char*) msg_75656550_1.c_str());
    }
}
String  _floatToStringWitRaz(float value, int raz)
{
    return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) 
    {
        return (currentTime>=(startTime + period));
    }
     else 
    {
        return (currentTime >=(4294967295-startTime+period));
    }
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s)
    {
        raw = raw << 3;
        if (data[7] == 0x10) 
        {
             raw = (raw & 0xFFF0) + 12 - data[6];
        }
    }
    else
    {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00)raw = raw & ~7;
        else if(cfg == 0x20)raw = raw & ~3;
        else if(cfg == 0x40) raw = raw & ~1;
    }
    return  (float)raw / 16.0;
}
float _readDS18_ow6(byte addr[8], byte type_s)
{
    byte data[12];
    byte i;
    _ow6.reset();
    _ow6.select(addr);
    _ow6.write(0xBE);
    for (i = 0; i < 9; i++) 
    {
         data[i] = _ow6.read();
    }
    _ow6.reset();
    _ow6.select(addr);
    _ow6.write(0x44);
    if (_ow6.crc8(data, 8) != data[8])
    {
        return 501;
    }
    return _convertDS18x2xData(type_s, data);
}
boolean mqttConnect()
{
    Serial.print("Connecting to ");
    Serial.print("m16.cloudmqtt.com");
    if (!mqtt.connect("", "bzcnhecm", "8jdgYxHld-tu")) 
    {
        Serial.println(" fail");
        return false;
    }
    Serial.println(" OK");
    mqtt.publish(topicInit, "GsmClient started");
    mqtt.subscribe("#");
    return mqtt.connected();
}
void mqttCallback(char* topic, byte* payload, unsigned int len)
{
    MQTT_inputtext = "";
    MQTT_inputTopic = "";
    MQTT_inputTopic = topic;
    for (int i=0; i<len; i++) 
    {
        MQTT_inputtext += (char)payload[i];
    }
}
Спс утром попробую, а то модуль остался на работе(

sampl
Сержант
Сообщения: 189
Зарегистрирован: 31.03.2017{, 11:28}
Репутация: 0
Откуда: Днепропетровск

Блок для GPRS модулей, связь по MQTT

#130

Сообщение sampl » 09.12.2022{, 20:49}

:( залил скеч но теперь новая беда ((
в мониторе ком порта
Initializing modem...
Waiting for network... fail


я так понимаю что он не может инеацелезировать модем (
Хотя карта с интернетом АПН правельный (( что может быть еще за беда(?
:smile225: Решено, проблема была что модуль не хотел мннять скорость на 19200 остался на 9600, поменял скорость в скече и запустился.
Всем спасибо ребята за нервную систему ))

kostetalt
Рядовой
Сообщения: 1
Зарегистрирован: 10.01.2023{, 04:31}
Репутация: 0
Имя: константин

Блок для GPRS модулей, связь по MQTT

#131

Сообщение kostetalt » 10.01.2023{, 04:36}

здравствуйте.простите за глупый вопрос. так можно блоки соединять?
Снимок.JPG

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Блок для GPRS модулей, связь по MQTT

#132

Сообщение Phazz » 10.01.2023{, 05:27}

kostetalt, всегда так можно было )

tornado
Рядовой
Сообщения: 30
Зарегистрирован: 14.04.2020{, 21:17}
Репутация: 1
Имя: Ivan

Блок для GPRS модулей, связь по MQTT

#133

Сообщение tornado » 25.02.2024{, 12:23}

rw9,
не могли бы вы добавить в блок MQTT_client функции "willTopic,willMessageOnline,willMessageOffline",а параметры: Broker,Port,mqttUser,mqttPass становятся входными, чтобы их можно было вводить из WEB-интерфейса?

Выход GSM_OK не работает!

Artem5000
Рядовой
Сообщения: 1
Зарегистрирован: 17.10.2021{, 15:58}
Репутация: 0
Имя: Артем

Блок для GPRS модулей, связь по MQTT

#134

Сообщение Artem5000 » 11.04.2024{, 19:08}

доброго времени суток! Поделитесь пожалуйста библиотекой bit_list.h или подскажите где ее взять

Ответить

Вернуться в «Разработка пользовательских блоков»