Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь MQTT+UART

Тема в разделе "Unofficial Developer Kit", создана пользователем Dmitry Orlov, 9 янв 2018.

  1. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    ESP должен получать через UART0 пакеты данных (40 байт), сохранять их в некотором массиве, и посылать по MQTT протоколу на сервер. И наоборот, получать по MQTT команды и отсылать их в UART0. На основе c:\Espressif\examples\ESP8266\blinky2\ и доработанного модуля uart.c я написал часть, которая работает с моим устройством. Принимает пакеты, заполняет массив данными, выдает на терминал (UART1) содержимое массива. Пример MQTT c:\Espressif\examples\ESP8266\esp_mqtt\ отдельно тоже работает. Когда я собираю все вместе, программа в ESP падает (illegal instruction) в самом начале. Когда я убрал и из своей программы и из esp_mqtt весь код, связанный с выводом в терминал (у меня он был довольно сложный, выводил такого вида строки с отображением float):

    0 ; 0x00ad:A; 45 'C:N; 0x09:N Normal ; 3.007A :N; 85.76V :N; 268.9W :N; 45.65kWh :A; 7:d 2:h 4:m 41:s :A; 0x00000000:A; 77 %:A;

    Код, кажется, заработал, но все равно иногда падает. Ощущение такое, что результирующий код просто куда-то не влазит, но я не знаю как к этому подступиться. Использую Unofficial Development Kit for Espressif ESP8266 v2.2.2 (23.04.2017) (с другими картина та же). В проектах с использованием Sming при сборке программы печатается табличка, но я так и не нашел как добавить в makefile код для этого.

    Section| Description| Start (hex)| End (hex)|Used space
    ------------------------------------------------------------------------------
    data| Initialized Data (RAM)| 3FFE8000| 3FFE838A| 906
    rodata| ReadOnly Data (RAM)| 3FFE8390| 3FFE9714| 4996
    bss| Uninitialized Data (RAM)| 3FFE9718| 3FFF0218| 27392
    text| Cached Code (IRAM)| 40100000| 4010757E| 30078
    irom0_text| Uncached Code (SPI)| 40209000| 4023E2EE| 217838
    Total Used RAM : 33294
    Free RAM : 48626
    Free IRam : 2708


    В проекте uart.zip - работающий код, принимающий пакеты в UART0 и печатающий их содержимое в UART1. В проекте mqtt.zip - попытка соединить вместе пример и этот код.


    Вопросы следующие:
    1. В чем может быть проблема
    2. Что делать
    3. Есть ли возможность включить оптимизацию компилятору, если проблема в размере?
    4. Что и куда добавить в makefile для вывода таблички о памяти.
     

    Вложения:

    • mqtt_gw.zip
      Размер файла:
      726,6 КБ
      Просмотров:
      14
    • uart.zip
      Размер файла:
      548,8 КБ
      Просмотров:
      19
  2. shuraf

    shuraf Читатель

    Сообщения:
    131
    Симпатии:
    6
    Счас придет pvvx и объяснит куда выкинуть 'эту глючную поделку'© )))
     
  3. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    Да я уже и сам на полпути к этому.

    PS Кстати, а на что, какие альтернативы есть?
     
    Последнее редактирование: 9 янв 2018
  4. cheblin

    cheblin Новичок

    Сообщения:
    6
    Симпатии:
    0
    Привет,

    если наличие MQTT не критично, то попробуйте перейти на BlackBox он сгенерирует для Вас полный стек исходников обработки пакетов. И на микроконтроллер и на сервер. Код будет оптимизированный и очень компактный, ничего лишнего.
     
  5. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    MQTT - критично. Обработка пакетов не вызывает никаких затруднений (я же их и формирую с другой стороны), проблема в том, что код, стабильно работающий отдельно (и на других платформах) падает вместе с тоже работающим MQTT, ради которого и используется ESP.
     
  6. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    Взял за основу исходники c:\Espressif\ESP8266_NONOS_SDK-2.1.0\examples\esp_mqtt_proj\ и вдруг все стабильно заработало, видимо что-то в SDK2.1.0 исправили, или в самих исходниках, не знаю, заменил все... И даже нашел как распределение памяти печатать :) Осталось найти как сделать настройку SSID/PWD через WiFiManager, но без Arduino (ну не могу я на него смотреть).
     

    Вложения:

    • UART_MQTT.zip
      Размер файла:
      749,5 КБ
      Просмотров:
      8
  7. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    И еще вопрос по MQTT, почему-то

    вот это, с перекодировкой данных в base64 работает,
    Код (C):
    1.  
    2.     sz = dat2b64(str, (char*)&nodes[ii].node, sizeof(tnode)+1); //nodes[ii].node + nodes[ii].timer
    3.     MQTT_Publish(&mqttClient, "wotqbxcv2G/dima/0", str, sz, 0, 0); //Browser subscribe "wotqbxcv2G/#"
    4.     os_printf("%d  %s %d \n\r", ii, str, *(char*)(&nodes[ii].node+1));
    5.  
    а просто посылка этих данных as is, сырых - вроде как ничего не посылает.

    Код (C):
    1.    
    2.   MQTT_Publish(&mqttClient, "wotqbxcv2G/dima/1", (char*)&nodes[ii].node, sizeof(tnode)+1, 0, 0);
    3.  
     
  8. Артемий

    Артемий Читатель

    Сообщения:
    165
    Симпатии:
    8
    Привет друг! Подскажи как mqtt пользоваться? К примеру надо управлять светодиодом, пишу led1_on в исходнике. Но вот где и как это прописать? И ещё вопрос : этот пример вебинтерфейс имеет?
     
  9. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    Этот - нет, есть и с веб-интерфейсом для сетапа. Чтобы пользоваться mqtt нужно довольно много. Нужен mqtt сервер (его зовут broker), нужен второй клиент - собственно пользовательский софт. esp (много esp) подключается к брокеру (он может быть локальным, в той же сети), или стоять где-то на каком-то сервере в интернете. Клиентская программа тоже подключается к брокеру и посылает сообщения через него в esp. Все это довольно сложное и громоздкое (ну если с реализацией в крохотной esp сравнивать, особенно если используется ssl шифрование), но удобство в том, что можно откуда угодно по имени устройства к нему обращаться, никакие ip адреса и роутинг пакетов от клиентской программы к устройству на esp волновать не должен. Максимум, если брокер локальный, нужно обеспечить только его видимость в интернете. Чтобы просто мигать LED'ом это все избыточно...
     
  10. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1

    Не понял в каком примере и где есть такая функция.
     
  11. Dmitry Orlov

    Dmitry Orlov Новичок

    Сообщения:
    109
    Симпатии:
    1
    А, теперь понял о чем вы. Просто смотрел как реально выглядит эта структура с учетом атрибутов выравнивания, потому что передается она, и надо чтобы на разных процессорах и компиляторах она совпадала. Год же прошел, я уже забыл все. Сейчас этот код давно готовый, работает, даже с ssl.
     

Поделиться этой страницей