Страница 7 из 7

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

Добавлено: 05 дек 2022, 23:16
sampl
starshoy81 писал(а): 05 дек 2022, 15:43 [ref]sampl[/ref], wemos не прошит
Та прошит( проэкт приложил но блин не могу до воевать(

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

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

Добавлено: 06 дек 2022, 16:42
starshoy81
[ref]sampl[/ref], в проекте не указан топик куда отправлять данные и проект сделан для нано

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

Добавлено: 06 дек 2022, 20:32
sampl
starshoy81 писал(а): 06 дек 2022, 16:42 [ref]sampl[/ref], в проекте не указан топик куда отправлять данные и проект сделан для нано
Ок спс попробую, но просто смущает то что нет даже попытки подключения к брокеру(((((

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

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

Добавлено: 06 дек 2022, 20:57
starshoy81
[ref]sampl[/ref], у меня библиотеку не требует. Эта библиотека, видимо, тянется из зависимостей другой библиотеки. Прямой её вставки в коде нет. Можно игнорировать предупреждение.
Ещё надо объявлять тип модема перед вставкой библиотеки модема.

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

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

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

Добавлено: 06 дек 2022, 22:26
starshoy81
[ref]sampl[/ref], код из приложенного проекта. Закомментировать ненужное можно

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

#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];
    }
}

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

Добавлено: 06 дек 2022, 23:29
sampl
starshoy81 писал(а): 06 дек 2022, 22:26 [ref]sampl[/ref], код из приложенного проекта. Закомментировать ненужное можно

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

#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];
    }
}
Спс утром попробую, а то модуль остался на работе(

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

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


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

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

Добавлено: 10 янв 2023, 04:36
kostetalt
здравствуйте.простите за глупый вопрос. так можно блоки соединять?
Снимок.JPG

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

Добавлено: 10 янв 2023, 05:27
Phazz
[ref]kostetalt[/ref], всегда так можно было )

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

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

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

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

Добавлено: 11 апр 2024, 19:08
Artem5000
доброго времени суток! Поделитесь пожалуйста библиотекой bit_list.h или подскажите где ее взять

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

Добавлено: 26 ноя 2024, 15:16
AstroGraf
в мониторе ком порта
Initializing modem...
Waiting for network... fail

Аналогичная проблема. Все перепробовал, менял симку, снижал скорость до 9600, понизил версию библиотеки до 0.7.9. Как мне показалось новая версия сильно библиотеки изменилась.
Есть еще варианты?

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

Добавлено: 29 май 2025, 07:58
alfred
rw9 писал(а): 01 фев 2022, 21:52 Как обещал выкладываю блоки для wi fi и GPRS. Работают и с ЕСП32 и с Ардуино Мега( у УНО или Нано маловато памяти).. В ESP32_Test_.7z и Test release_m.7z это примеры.. Можно в случае пропадания одного канала связи с помощью логики автоматом переходить на другой канал...с Wi Fi на Gprs. Работают стабильно,зависаний не обнаружено, НО! надо правильно их расставлять, т.е. соблюдать порядок! Иначе Фл прог начинает путать скетч, особенно важно первыми выставлять блок Streams, потом Провайдер и после Клиента! Streams прописывает порт, поэтому он нужен только для СИМ800. ИЗ-за нехватки времени мой товарищ не смог... пока... сделать описание блоков... В примерах ESP32_Test_ проект метеостанции - Улица, дом, атм. давление и котёл отопления с установкой верх порога температуры при достижение которого отправляется уведомление каждые 2 мин. Датчик дыма при сработке тоже отправляется уведомление на тел. каждые 2 мин.. Test release_m блоки Wi Fi и Gprs работают по очереди каждые 2 мин.. Пользуюсь приложением Mqtt Push Client, в нём есть пуш-уведомления. Блок Wi Fi Diag - это показатель уровня сигнала.Всё работает стабильно.. Да, ещё забыл.. во вложениях есть библиотека st_timers.zip, она используется в блоках и возможно её придётся установить если IDE попросит.
здравствуйте, создаю проект с этими блоками, все прошивается но по ком порту видно что не нет подключения к gprs, после долгих мучений пришел к тому что в иде добавляю код в начале:#define SerialAT Serial2
#define RX_PIN 16
#define TX_PIN 17 потом. потом в сетапе SerialAT.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
delay(3000); . и вот здесь прописать id где "Test_client" mqtt_reconnected = mqttConnect( &mqtt_264134246, "Test_client", и после этого только запускается все но периодический теряет связь с брокером , не подскажете в чем может быть проблема?