Каталог статей
Конструктор сайтов - uCoz
Приветствую Вас, Пробегающий мимо · RSS 21.07.2017, 08:31
Главная » Статьи » Статьи » Микроконтроллеры

NeilScope 3, выход в сеть.

NeilScope 3, выход в сеть.


    Наверное уже мало кто не слышал про доступные и мощные по своим возможностям, модули серии ESP 01-12. Однако, так пока сложилось что осциллограф NeilScope 3 (далее NS3) не имеет безпроводной связи с ПК, и появление этих модулей просто не оставляет никакого выбора (: . Первое - необходимо достич аппаратной и программной совместимости со всеми ревизиями плат NS3, а их уже достаточно много, значит используем только те аппаратные ресурсы, которые доступны на данный момент. Нарисуем блок схему подключения модуля к NS3, нам потребуются дополнительные сигналы управления модулем и значит прийдется применить расширитель I/O, иначе потеряем совместимость. Расширитель I/O берем с интерфейсом I2C, этот интерфейс уже есть в NS3 и его достаточно легко "вытянуть". Блок схема:


    Достаточно просто, первое - по I2C соеденяем расширитель I/O, второе - "врезаемся" в USART, и третъе - заводим управление модулем с расширителя I/O. Для исключения конфликтов на шине USART необходимо использовать ключ 74HC4053, или любое другое решение с соответствующей функциональностью. МК NS3 должен иметь возможность менять местами сигналы RX/TX модуля ESP, для этих целей и служит 74HC4053. Такое соединение модуля ESP и NS3 позволяет использовать эту "связку" в следующих режимах:

  • Host OFF  -  МК выключит ESP и свой интерфейс USART.
  • ESP Bridge  -   MCU USART - выключен, ESP  - включен, ESP USART скоммутирован - ESP_TX->CP2102_RX, ESP_RX<-CP2102_TX
  • Host CP2102  -   MCU USART - включен, ESP  - выключен
  • Host ESP  -  MCU USART - включен, ESP  - включен, ESP USART скоммутирован - ESP_TX->CP2102_TX (MCU_RX), ESP_RX<-CP2102_RX (MCU_TX).
    Автоматически отключается и переходит в режим Host OFF если в этом режиме был подключен кабель USB к NS3 и ПК, недопуская конфликта на шине USART.
  • ESP Boot -  по соединениям то же что и ESP Bridge, но при включении вывод GPIO0 модуля находится в 0, что переводит его в режим загрузчика, это позволяет перепрошивать модуль используя NS3 просто как "мост".
    Возможный вариант схемы под модуль ESP-07 (проект proteus 8):

     Вместо 74HC4053, как уже писал выше, можно применить любое решение выполняющее туже функцию, например логика с возможностью перевода выходов в высокоимпедансное состояние (Tri-state), мне было проще сделать на 4053. Стабилизатор 3.3В можно брать любой, с выходным током не менее 350мА и возможностью отключения. Важно отметить что для корректной работы с NS3 модуль ESP должен быть выключен при подаче напряжения на вход схемы показанной на скриншоте. То есть, какой бы стабилизатор не был применен, если стабилизатор выключается активной 1 (SHDN), то этот вывод должен быть подтянут резистором 10кОм к входу питания VIN+ на схеме. Если же у стабилизатора отключение по активному 0, то подтянуть вход необходимо уже к GND, как собственно и сделано на схеме.
    На данный момент NS поддерживает 2 типа микросхем I2C GPIO, это MAX7320 и PCA9675, добавить поддержку других мс не состовляет труда, пишите на форум, постараюсь оперативно добавить. В случае PCA9675 нужно учесть что эта мс имеет "квази" двунаправленные I/O, и выход у нее возможен только как открытый коллектор. При включении питания на выходах PCA9675 будут лог. 1 (это явно указанно в документации) и из-за такого поведения не получиться перевести модуль в режим загрузчика, модуль все равно успевает захватить 1 на входе GPIO0, который "проскакивает" на выходе PCA9675 от момента включения питания и до инициализации PCA9675. В этом случае необходимо инвертировать выходы что бы все работало корректно, за дополнительные трудности получаем вход / выход, а не только выход в случае MAX7320. У MAX7320 другое преимущество - выходы push-pull и достаточно мощные по току.
Вариант схемы для MAX7320 (проект proteus 8) :

     Аппаратные "приготовления" мы практически закончили, проверяем собранные схемы (или объеденяем их в одну), и соединяем все по вот этой схеме ( проект proteus 8 ):

    Ошибки на схеме нет, MCU_TX соединен с TX платы ESP-07 (точнее TX это тогда  когда 0 на входе RVS). Никаких конфликтов на шине не будет, МК не включит свой USART пока не подаст 1 на вход RVS (через MAX7320).
Перепроверим все ли сделали правильно, если это так, то подключим аккумулятор, включим питание NS3. Модуль должен быть в выключенном состоянии, на всех выходах MAX7320 должен быть 0. Переходим в MENU->Advanced... и в качестве расширителя IO MAX7320, прибор выведет результат инициализации сообщением на экране. Если схема под MAX7320 отличается от приведенной, то в том же меню нужно установить I2C адрес в зависимости от состояний выводов AD0 / AD2.
   

ESP-07

    Теперь обратим внимание на сам модуль ESP-07, для коммуникации с NS3 в модуле может использоватся прошивка NodeMCU, позволяющая запускать lua скрипты на модуле, на данный момент NodeMCU уже не такая глючная как поначалу и большинство перефирии работает как нужно. Конечно же спорный выбор в контексте производительности, но по крайней мере в качестве "моста" вполне хватает. Также можно программировать и прошивать модуль из под Arduino IDE, то есть считай C++. На этой платформе мы и "поплывем" дальше :) , а если все же интересен NodeMCU, то привожу также инструкцию и для работы на этой платформе. Стоп, забежал я немного вперед, сначала:

Обновление прошивки NS3

    В связи с изменением репозитория исходников NS3 сборка существенно упростилась:
  1. Если у вас еще не установлен Python3, то сделайте это, он все равно нам понадобится для дальнейшей работы.
  2. Устанавливаем gcc toolchain - arm-none-eabi , не забываем добавить в переменные окружения (чекбокс при установке), переагружаемся.
  3. Скачиваем репозиторий NS3 - ссылка, распаковываем куда-нибудь, только путь без пробелов, это важно.
В корневой папке репозитория находим скрипт build.py. Запускаем его из консоли с ключем -h или --help:
        > python ns3_build.py -h


Ключ --lcd-bits указывает сколько у ЖК при записи идет бит на точку, то-есть какова длина слова в битах. --lcd-bus определяет физическое соединения ЖК и МК, 8 линий, или 16 с использованием внешней защелки 74HC573. Указываем необходимые ключи, также при желании добавляем ключ --verbose для более полного вывода информации во время сборки:
        > python ns3_build.py --lcd-bits __LCD_16_BIT__ --lcd-bus __LCD_DIRECT__


По окончанию работы скрипта в папке ' projectpath\\.out ' будут файлы прошивки bin / hex / elf. Папка назначения изменяется ключем -o :
        > python ns3_build.py -o C:\\NS3\\Firmwares\\target


Это всё что было необходимо, можно прошивать осциллограф утилитой NSFlasLoader. Cборка прошивки самому гарантирует что используемая прошивка всегда актуальной версии, советую поступать именно так. В дальнейшем возможно будет автоматическая проверка версии и обновление прошивки через сеть.



Для тех кому все это проделовать лень, или интересует только бинарник, можно посмотреть на форуме - ссылка, там выкладываю последние бинарники.

 

Arduino IDE

  • Сначала скачиваем официальный установочный пакет с официального сайта Arduino.cc
  • Запустить Arduino IDE, далее Файл – Настройки – в поле Additional Boards Manager URLs вставить ссылку на стабильную версию http://arduino.esp8266.com/package_esp8266com_index.json , нажать OK (В это поле вы можете вводить несколько ссылок, разделенных запятой)
  • Перезапустить Arduino IDE
  • Инструменты – Плата – Boards Manager
  • В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum , Кликните Install и дождитесь окончания загрузки (около 130 Мегабайт). Если загрузка произошла слишком быстро, возможно, что вы уже устанавливали Arduino IDE для ESP8266 и потребуется почистить кэш Boards Manager, иначе у вас останется установленной старая версия. Нужно сначала деинсталлировать старую версию, а потом необходимо удалить файлы кэша. Для Win7 удалите файлы из папки C:\Users\Пользователь\AppData\Roaming\Arduino15 и повторите все, начиная с п.2
  • Закрываем Boards Manager, перезапускаем Arduino IDE
  • В меню Инструменты выберите Плата – Generic ESP8266
  • Установите частоту вашего модуля 80 или 160Mhz, размер флеш памяти 512к и выберите последовательный порт, к которому подключен ваш USB-TTL адаптер


Настройку мы закончили, открываем скетч моста Telnet сервер<->USART - ссылка, он полностью основан на стандартных примерах, ничего сложного.
 

Прошивка

    Подключаем модуль, включаем осциллограф, в MENU->Advanced.. выбираем используемый I2C<->GPIO - PCA9675 или MAX7320, пр необходимости изменяем I2C slave адрес под используемую мс. После в этом же меню переводим коммуникацию с ПК в режим - ESP Boot, модуль при этом должен включится и мигнуть синим светодиодом. Устанавливаем драйвера виртуального порта COM - CP2102 VCP, если до этого конфигурировали CP2102, то сбрасываем VID/PID CP2102 до заводских, делается это в один клик утилитой - CP2102 util, еще раз спасибо Ильдару!


Прошиваем модуль нажав Вгрузить в Arduino IDE:



После прошивки, отключаем кабель USB и в осциллографе переключаем коммуникацию на ESP Host. Если не интересует NodeMCU то можно пропустить следующий параграф и сразу перейти к завершительному этапу
.
 

NodeMCU

    Идем в репозиторий NodeMCU, там находим онлайн генератор прошивки (Online firmware custom build), кому лень - ссылка, выбираем необходимые модули и ждем на почту письмо с ссылкой на загрузку, это произойдет когда прошивка будет готова:


Для прошивки модуля нам понадобится ESP8266Flasher - ссылка, загружаем, запускаем, и выбираем во вкладке Advanced скорость - 115200, остальное не трогаем (разве что SPI Mode скорее всего нужно ставить в QIO для ESP-07, но работает и так):
 
Во вкладке Config выбираем прошивку сохраненную по ссылке из почты или из репозитория, переводим комуникацию в режим ESP Boot (точно так как в случае прошивки через Arduino IDE), нажимаем Flash. Результат:


   Если все сделали правильно то после успешной прошивки нужно перезагрузить модуль. Сначала запускаем терминал, например Termite, выбираем порт и скорость 9600,  и изменяем комуникацию в осциллографе на Host OFF и затем ESP Bridge. Модуль должен быстро мигнуть 2 раза, включаем в режиме "моста" потому что так проще сразу все проверить и именно в этом режиме загружаются, и/или исполняются lua скрипты на модуле. После включения должны увидеть что то подобное этому:


    Отлично, на первую строку "кракозябл" можно не обращать внимания, это сообщение загрузчика ESP8266, а далее идет приветствие NodeMCU и сообщение о неудачной попытке запуска init.lua, ну да правильно, мы ведь его еще не загрузили (:
Значит качаем например мою утилиту - esp8266-nodemcu-commander, и всё! Можно загружать и исполнять lua скрипты на модуле, из flash и/или ram.

Потрясающая весчь как по мне этот NodeMCU :) , так как модуль ESP-07 имеет богатый набор интерфейсов и большую функциональность, несмотря на то что основная его функция в нашем случае, конечно же, остается коммуникация между NS3 и сетью/интернетом. Если теперь мне понадобится WiFi датчик температуры то скорее всего выберу NodeMCU (:
Скачиваем init.lua из репозитория, или создаем файл с таким же именем и вставляем в него следующий код:




сохраняем файл, перед этим не забываем поменять ssid и password для своей WiFi сети, строка 12 - wifi.sta.config("*********","*********"). Заливаем файл в модуль используя esp8266-nodemcu-commander, перезапускаем модуль ESP.  В репозиторий я также включил прошивку NodeMCU, именно эту прошивку я использовал для своего модуля ESP-07.

 

Final

    Сбрасываем модуль установив режим ESP Host в осциллографе, это режим когда прибор переключается на обмен с ПК через модуль ESP. При этом USB кабель должен быть отключен от прибора, иначе осциллограф сам автоматически отключит модуль ESP. Происходит это потому что CP2102 "мешает" обмену между модулем и МК осциллографа, одновременно они работать немогут. По "умолчанию" в обеих прошивках установлен IP модуля - 192.168.1.119, маска подсети - 255.255.255.0, и шлюз - 192.168.1.1, если нужны другие значения то измените их перед прошивкой, в скетче Arduino IDE если пошли по первому варианту, и/или в файле init.lua если прошивали NodeMCU.


   
    На данный момент модуль работает в режиме telnet сервера, порт 2323, для связи конечно ужен telnet клиент. Клиента взял из стандартных библиотек python, запускается он в пару строк кода. Оставалось только интегрировать его в "коммандный драйвер" NS3 который уже использовался в тестирующей утилите осциллографа - ns-test-util, этой же утилитой и оттестировал работу связки ESP-07 <-> осциллограф. Для запуска утилиты качаем репозиторий, распаковаем и запускаем файл main.py:
    > python main.py

Выбираем интерфейс связи с осциллографом и запускаем тест:
   
Как видим тест пройден успешно, связь через telnet клиент/сервер есть!


 

Эпилог

   На данный момент невозможно использовать софт под осциллограф и логический анализатор написанный Ильдаром, так как для этого нужно изменить взаимодействие программы и драйвера, сейчас софт жестко завязан на драйвер USBXpress от Silabs.

    На самый конец хотелось бы описать пару трудностей которые возникли по ходу дела, первый "баг" вылез при наладке связи модуля ESP и МК по USART, при передаче ESP8266 дублирует байты 0xFF, смена режимов USART в МК и модуле ничего не дало. Очень неприятный "баг" могущий поломать систему взаимосвязи осциллографа и ПК, долго думал и пришел к решению дублировать все байты на стороне ESP кроме 0xFF так как ESP их сама и дублирует, а на стороне МК учесть что при обмене посредством модуля ESP от ПК приходят сообщения с дублированными байтами. Еще одну проблему подкинула библиотека telnetlib, она входит в стандартный набор библиотек, так вот при приеме данных от сервера библиотечные функции вырезали все байты с значением 0x00, для текстовых сообщений это логично, но нам нужны и "сырые" данные в которых байт с значением 0x00 не редкость. Пришлось полезть в исходник telnetlib.py и посмотреть что к чему, на мое удивление я разобрался в нем очень быстро, за 10 мин был написан неблокирующий метод чтения данных от сервера - read_eager_raw(), за прототип взял существующий метод read_eager. Окорректированный вариант telnetlib добавил в репозиторий ns-test-util.

Были и другие мелочи но это ерунда, в общем как то так (: Enjoy!


 
 print( [ln.format() + '\n' for ln in links] )

 

Категория: Микроконтроллеры | Добавил: LeftRadio (06.12.2015)
Просмотров: 1641 | Комментарии: 2 | Рейтинг: 4.7/3
Всего комментариев: 2
0
1  
Нууууууу блин.... Ну мне ничего не остается кроме как приняться за доработку софта!!! B) co_ol

2  
co_ol B) drink Ждёмс!!!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]