Jump to content

Recommended Posts

Введение.

Цель данного поста – объяснить, как сформировать сообщение в формате JSON, используя MicroPython и библиотеку ujson на ESP32. О том, как запустить MicroPython на ESP32 рассказано здесь, а как разобрать/распарсить JSON, смотрите предыдущий пост.

 

Код.

Подключаем модуль ujson при помощи следующей команды:

import ujson

Ниже показан пример сообщения, которое мы постараемся в итоге сформировать. В данном примере мы моделируем возможное сообщение от IoT устройства некоторого типа (например, датчика температуры), передающего какие-то измеренные значения:

{
"deviceType": "Temperature",
"values": [23,22,25]
}

Нам надо сохранить структуру этого сообщения в одной переменной, потому будем использовать объект типа словарь (англ. версия здесь). Он позволяет получать значение по ключу и очень хорошо подходит для структуры JSON.

Начнём с создания пустого объекта типа словарь в переменной dict. После присвоим ключу “deviceType” в качестве значения строку “Temperature”, а ключу  “values” присвоим список со значениями, показанными в JSON. Обратите внимание на то, что значением в словаре Python может быть даже такой объект, как список.

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

dict = {}
dict["deviceType"] = "Temperature"
dict["values"] = [23,22,25]

print(dict)

На Рисунке 1 показано, что должно получиться в результате. Как видим, у нас есть структура словаря с некоторыми парами ключ-значение. Выведенное строковое представление словаря Python уже очень похоже на JSON.

5bcb8eaf42232_Figure1ContentofthePythondictionary..png.410134a374e4294a6676309efa944ade.png

Рисунок 1. Содержание словаря Python.

Остаётся перевести словарь в JSON-строку, используя функцию dumps из модуля ujson. Этот метод принимает в качестве аргумента словарь, а возвращает его представление в формате JSON. Выведем то, что возвращает эта функция.

encoded = ujson.dumps(dict)
print(encoded)

Окончательный результат показан на Рис. 2. То, что получилось, очень похоже на строковое представление словаря, которое показано на Рис.1, но теперь ключи и значения заключены в двойные кавычки, а не в одинарные. То есть в полном соответствии с форматом JSON.

5bcb8fff1beb1_Figure2FinaloutputoftheJSONencodingprogram..png.26be0050b25a6499a8fa5946f4bc4a9b.png

Рисунок 2. Окончательный результат работы программы расшифровки JSON.

Важно: Этот пост - перевод статьи, написанной Nuno Santos из Лиссабона (Португалия), инженером в области электроники и компьютерной техники. Можно познакомиться с его оригинальными статьями здесь. Он написал ещё много полезных уроков и проектов про ESP32, ESP8266, и, если интересно, можно почитать его блог.

У DFRobot есть много других обучающих статей по связке ESP32 с ардуино и готовых проектов на основе ESP32.


 

Edited by DFRobot

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By DFRobot
      Введение.
      Цель данного урока - научиться запускать на ESP32 скрипты MicroPython, написанные на компьютере, используя программу ampy. Этот урок был опробован и на ESP8266, и на ESP32.
      Ampy - это утилита от Adafruit, и его исходники можно скачать отсюда. На Adafruit есть подробнейшая документация по этой утилите, и рекомендуем с ней ознакомиться. Однако, самым простым способом начать использовать ampy - это загрузить его через pip.
      В отличие от того, как мы поступали на предыдущих уроках, отправляя в консоль по одной команде, ampy позволит запустить скрипты на microPython из файла. На этом уроке мы по умолчанию считаем, что на вашем компьютере уже установлены Python и pip, а на плате с ESP32/ESP8266 установлен MicroPython.
      Процедура.
      Первым делом устанавливаем ampy. Для этого открываем командную строку и вводим следующую pip-команду:
      pip install adafruit-ampy Мы используем версию Python 2.7 на операционной системе Windows, и результат выполнения команды показан на Рис. 1. У вас может выводиться что-то другое в зависимости от ОС и версии Python.

      Рис.1 Установка ampy.
      Очень детальное руководство по установке ampy есть и на Adafruit.
      Ну и теперь запуск кода из скриптов станет очень простым. Для этого надо всего лишь создать файл с именем script.py в папке на Вашем компьютере и ввести код ниже. Естественно, название файла может быть любым другим. Также и расширение не обязательно должно быть *.py ( я пробовал с расширением *.txt, и всё прекрасно работало), но раз уж файл содержит скрипт, написанный на языке Python, то хорошим тоном будет использование именно расширения *.py. 
      Для примера в файле запишем строку:
      print("Hello from my script!") В командной строке переходим в ту папку, куда сохранили файл. Отправляем команду, изменив значения в квадратных скобках на подходящие:
      ampy --port [YourDevicePort] run [YourFileName] В нашем случае ESP8266 подключен к порту COM7, а ESP32 к порту COM5, и команды для проверки каждого из них показаны ниже, также с правильным именем файла:
      ampy --port COM5 run script.py ampy --port COM7 run script.py Если всё в порядке, вы получите примерно то же, что и на Рис. 2, где виден результат работы скрипта на ESP32 и ESP8266.

      Рис.2. Результат работы скрипта, запущенного на ESP8266 и на ESP32.
      Важно: в той версии утилиты ampy, которая установлена у меня, выполнение любого скрипта сразу после подключения контроллеров выдаёт ошибку подобную той, что показана на Рис. 3. Это случается как на ESP8266, так и на RSP32. Но после этой первой ошибки последующие запуски скриптов выполняются нормально. Я пока не нашёл причины этого, но поделюсь, если найду.

      Рис. 3.
      Пожалуйста, напишите в комментариях, наблюдается ли такая ошибка у вас.
       
      Важно: Этот пост - перевод статьи, написанной Nuno Santos из Лиссабона (Португалия), инженером в области электроники и компьютерной техники. Можно познакомиться с его оригинальными статьями здесь. Он написал ещё много полезных уроков и проектов про ESP32, ESP8266, и, если интересно, можно почитать его блог.
      У DFRobot есть много других обучающих статей по связке ESP32 с ардуино и готовых проектов на основе ESP32.
  • Сообщения

    • 2 bam-buk:   А мона картинкой - для тех кто не пользуется мультисимом?
    • если решитесь брать у китайцев, то 30 руб 100% не рабочие, по 80 руб у меня работали, 90 ватт рассеивали, мощнее не нашёл БП, за 30 руб и 25 ватт не держат
    • Во первых "уважаемый" соблюдайте правила и следите за языком и пальцами.... а то и пол года не прошло как зарегились а правила уже забыли... так и в баню легко можно попасть! Во вторых везде есть своя специфика... как минимум одна из них это мое положение, отсюда и вижу временами фургончик укрчастотнадзора и других "компетентных служб" и с "своими антеннами". В своем районе я с кт913 не играюсь, а то как Вы ранее написали статью можно получить. Если раньше и игрался жучками то максимум что то слабомощное метров на 100. Ну а если где то в поле/селе/на окраине где нет особых служб то конечно без проблемм.... но опять же пока не на кого не налезешь!
    • Как-то так: Melodi103.ms14 С уважением В.
    • да - шим ругается - нужно переходить на двуполупериод - или два кондера - проверю сейчас на них - норм или нет- похоже что здесь нужно просто посчитать стоимость конденсатора и моста 
    • Простой стабилизатор с малым падением.
    • Ваши эзотерические споры с Василичем весьма увлекательны)) и не хотелось бы в них вторгаться, но тем не менее вы оба правы и неправы одновременно. Нет ни общероссийских, ни общемировых стандартов и/или регламентов по которым определяется при каких параметрах измеряется мощность (возможно в СССР и были ГОСТы, но вы бы знали как они пишутся, но ныне ничего). УМЗЧ не военный корабль). Отсюда следует, что каждый др.. дирижирует как ему нравится) Мне предел в 10% не режет слух, если это одна вторая гармоника, например. Есть микросхемы на которых пишут мощность при 20% КНИ и это многомиллиардные магнаты. И они кто угодно, но не дураки точно. Хотя в данном случае микросхему "слушать" было невозможно хД Но само собой есть какой-то разумный предел и при 50% КНИ явно мерять бред. Самое простое и понятное решение это давать график зависимости КНИ-Мощность. Во многих даташитах так и делают. Тот же самый вопрос, зачем мне 20кГц и больше, если даже у детей порог 18 кГц, а у меня так и вовсе 16 сейчас... Ну это бессмысленно т.к. трансформатор я менять в данном случае точно не буду, а колонки менять еще больший бред. Поищу конечно реостат для интереса, если получится, но как искать Ra я так и не понял. Просто тыкать эквивалент вместо транса, если транса еще нет? По вашей методике на будущее. И вроде как схема не новая и TW6SE должен подходить. Из данных условий задачи на чем остановиться? Спасибо
  • Покупай!

×
×
  • Create New...