LCD осциллограф на Arduino
Несколько лет назад я опубликовал код и схемное решение осциллографа на базе PIC18F2550 KS0108. Однако в настоящее время я решил воссоздать данный проект, используя плату Arduino Fio.
Я использовал плату Arduino Fio, которую можно приобрести от SparkFun (доступно на Amazon.com) и небольшой SPI графический LCD-дисплей, который я приобрел за несколько долларов на сайте dx.com (код товара SKU 153821). Поскольку у меня нет паяльника, я импровизировал с кабелями типа “мама-мама”, которые также можно приобрести на сайте dx.com (код товара SKU 151650).
На сайте Dx.com данный LCD-дисплей является 5 В модулем, но на сайте производителя утверждается обратное (mini12864) (перевод с китайского с помощью Google Translate):
Размеры (Д × Ш × В): 47мм × 38мм × 6мм (без учета выводов)
Видимая часть LCD-дисплея (Д × Ш): 33.7мм × 33.5мм
Активная зона отображения LCD-дисплея (Д × Ш): 30.7мм × 23мм
Подсветка: Белая
Рабочее напряжение: 3.3В ~ 5.5В (встроенная схема усиления, без нагрузки)
ИС управления: UC1701
Формат дисплея: 128 × 64 ряда
Дисплей: Синий на белом фоне
(mini12864 даташит)
Таким образом, я заказал один графический дисплей, подождал несколько недель, пока его доставят (поскольку с сайта dx.com пересылка товара идет очень долго), получил его, установил в схему и создал простой скрипт “Hello World” для подтверждения, что дисплей и плата правильно функционируют вместе. Код программы находится в файле hello_word.ino
И схема действительно работает!
Благодаря тому, что мой предыдущий проект был написан на C, переход на Arduino занял несколько минут. Я использовал преимущества открытого кода библиотеки графического дисплея (u8glib) для управления основной работой и добавил меню последовательного порта для манипулирования различными параметрами дисплея. Главное отличие между проектом на PIC и данным проектом заключается в следующем: поскольку плата Arduino Fio - это 3.3 В устройство, оно может управлять входами в диапазоне напряжения 0-3.3 В, ограничивая область использования в качестве “осциллографа” без соответствующей защиты входов/ изменения величины напряжения. Код является полностью портативным. Это означает, что вы можете запрограммировать любой другой Arduino и очень быстро запустить устройство.
Интернет вещей с RemoteXY
Интернет вещей с каждым годом становится всё более распространен, тем не менее промышленные устройства не всегда удовлетворяют потребностям пользователей. И естественно радиолюбители создают устройства IoT исходя из своих потребностей. Управление устройствами IoT возможно либо через сервер, либо напрямую посредством беспроводного или интернет соединения. Сервисов и программ, предназначенных для создания и управления
устройствами IoT, предостаточно, есть из чего выбрать. В этой статье я расскажу о сервисе RemoteXY, предназначенном для удаленного управления устройствами ардуино и ESP8266.
Сервис RemoteXY состоит из онлайн редактора интерфейса (который генерирует "скелет" программы), программы для мобильных устройств (как для андройд, так и для айОс) и библиотеки для ArduinoIDE. Программа для мобильных устройств может управлять всеми устройствами, созданными с применением сервиса RemoteXY, и так как внешний вид интерфейса хранится в микроконтроллере, это упрощает настройку приложения для работы с устройством. Программа для андройд устройств условно-бесплатная, вы можете использовать free версию программы без ограничений в том случае, когда в интерфейсе устройства используется до 5 элементов. Если элементов более 5, то время подключения ограничено 30 секундами (за это время можно успеть произвести настройку устройства и просто оценить и протестировать созданное устройство). Полная версия программы никаких ограничений не имеет.;
Мобильное устройство (смартфон или планшет) может связываться с ардуино (так же поддерживаются платы WeMos, NodeMCU, The AirBoard и ChipKIT, но упоминать я буду всё время ардуино) посредством блютуз (через модули HC-05, -06, -10), вай-фай (через модуль esp-01) или проводного интернета (через ethernet shield или через вай-фай модем). Если ардуино подключено к модему (через вай-фай или эзернет), то оно может быть доступно как в локальной сети, так и через сеть интернет (для этого потребуется настройка модема).
Рассмотрим "blink" для сервиса RemoteXY - поморгаем светодиодом. Для этого необходимо подключить модуль связи к ардуино (в этом примере я буду использовать ардуино мега2560 и блютус модуль HC-05, соединение через Serial1). Далее переходим в он-лайн редактор интерфейса, расположенный по адресу https://remotexy.com/ru/editor/, внешний вид редактора представлен на скриншоте.
Редактор интерфейса состоит из 3 частей: панели элементов интерфейса слева, рабочего поля в центре и панели конфигурации и свойств элементов справа.
Далее необходимо настроить конфигурацию подключения, для этого необходимо в панели конфигурации щелкнуть мышью на любой пункт меню конфигурации, откроется всплывающее окно в котором необходимо выбрать: тип соединения, используемый контроллер, используемый модуль и среду программирования, а затем нажать "применить". Окно закроется и выбранные настройки отобразятся в меню конфигурации.
Далее необходимо настроить подключения модуля, в случае для блютуз модуля необходимо выбрать интерфейс (Hardware или Software Serial), порт или пины (для Software Serial) и скорость обмена. Так же можно настроить ориентацию и цвет фона экрана. Примененные мной свойства отображены на скриншоте.
Теперь можно приступать к постройке интерфейса. Добавим на рабочее поле элемент "кнопка" (просто перетащите его на рабочее поле в любое удобное место), при нажатии на который будет загораться светодиод расположенный на ардуино. Вы наверняка уже заметили, что в панели конфигурации появилось выпадающее меню свойств элемента.
Набор свойств индивидуален для каждого типа элементов. Для любого элемента можно задать его цвет и привязку к странице (в этом проекте страницы не рассматриваются), для всех элементов управления и индикации можно задать имя переменной. Для элементов "кнопка" и "выключатель" можно сделать привязку в выводам, в этом случае редактор интерфейса сам сгенерирует дополнительный код для управления выводами с кнопки или выключателя. Первая добавленная кнопка (или выключатель) привязывается к выводу 13 автоматически, остальные добавляемые кнопки и выключатели автоматически не привязываются. Жмем на "Получить исходный код", открывается страница с автоматически сгенерированным кодом. Копируем код в ArduinoIDE. Внимание: для дальнейшей работы необходимо установить библиотеку RemoteXY, которая расположена по адресу https://remotexy.com/download/RemoteXY.zip
Рассмотрим сгенерированный код, все пояснения в комментариях
?
/* -- New project -- This source code of graphical user interface has been generated automatically by RemoteXY editor. To compile this code using RemoteXY library 2.2.5 or later version download by link https://remotexy.com/en/library/ To connect using RemoteXY mobile app by link https://remotexy.com/en/download/ - for ANDROID 3.7.1 or later version; - for iOS 1.0.7 or later version; This source code is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ ////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // определение режима соединения и подключение библиотеки RemoteXY. В данном случае используется Hardware Serial #define REMOTEXY_MODE__HARDSERIAL #include <RemoteXY.h> //подключаем библиотеку сервиса RemoteXY // настройки соединения, порт и скорость соединения. Я использую порт Serial1, что бы исключить проблемы при загрузке программы в ардуино и не отключать блютуз модуль каждый раз при загрузке. #define REMOTEXY_SERIAL Serial1 #define REMOTEXY_SERIAL_SPEED 9600 // конфигурация интерфейса. Начиная с этой строки ничего не менять. #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = //в этом массиве хранятся все настройки интерфейса, положение, размер, цвет и названия переменных всех элементов. { 1,0,12,0,6,5,0,1,0,79 ,8,12,12,2,88,0 }; // структура определяет все переменные вашего интерфейса управления struct { // input variable uint8_t button_1; // =1 если кнопка нажата, иначе =0. Это та самая кнопка которую мы добавили на рабочее поле. // other variable uint8_t connect_flag; // =1 if wire connected, else =0. Этот "флаг" очень полезная переменная, её тоже можно использовать. } RemoteXY; #pragma pack(pop) //эта строка завершает настройку интерфейса. Еще раз напомню, между #pragma pack(push, 1) и #pragma pack(pop) ничего не менять. ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_BUTTON_1 13 //поскольку мы привязали кнопку к выводу 13, то он-лайн редактор сам добавляет константу PIN_BUTTON_1 и в функции setup() настраивает её как выход. void setup() { RemoteXY_Init (); //запускаем обмен данными между смартфоном и ардуино. pinMode (PIN_BUTTON_1, OUTPUT); // TODO you setup code } void loop() { RemoteXY_Handler (); //этот обработчик запускает обмен данными между ардуино и смартфоном в каждом цикле loop(), именно после его вызова данные от элементов управления передаются в ардуино, а данные элементов индикации - в смартфон. digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH); //этот код так же сгенерирован потому, что стоит привязка к 13 выводу. Светодиод на плате загорится когда будет нажата кнопка. // ну а дальше размещаем остальной код программы, по необходимости. // используйте структуру RemoteXY для передачи данных } |
Теперь можно загрузить этот код в ардуино и перейти к программе RemoteXY на смартфоне.
Поскольку в данном проекте используется блютуз, то сперва надо провести сопряжение блютуз модуля со смартфоном. Пояснять этот пункт я не буду. Далее переходим в программу RemoteXY и нажимаем на "+" в правом верхнем углу,
далее выбираем Bluetooth для модулей HC-05, -06 и Bluetooth BLE для модуля HC-10,
выбираем необходимый модуль из списка.
При удачном соединении в программе сразу же открывается интерфейс устройства. Теперь можно потыкать на кнопку и понаблюдать как загорается светодиод на 13 выводе.
Подведем итоги
Данная статья ни в коем случае не претендует на исчерпывающее руководство по сервису RemoteXY и не несет рекламный характер (я обычный пользователь и никакого профита с этого не имею). Цель статьи - познакомить любителей ардуино с этим сервисом, и на простом примере показать как это работает.
Конечно для полного счастья необходимо рассмотреть преимущества и (что главнее) недостатки представленного сервиса.
Преимущества:
- Самый главный плюс - реализация удаленного доступа к ардуино
- Используется одна программа для всех управляемых устройств, что экономит память мобильного устройства
- Настройки интерфейса хранятся непосредственно в контроллере, поэтому нет необходимости в настройке каждого мобильного устройства под конкретный контроллер
- Позволяет, как продублировать элементы управления и индикации, так и перенести их частично или полностью на мобильное устройство
- При переносе элементов управления и индикации на мобильное устройство освобождаются выводы контроллера
- Позволяет строить довольно сложные интерфейсы управления, обладает широким набором элементов управления, индикации и оформления
- Является условно-бесплатной системой, даже при построении сложных интерфейсов
Основной недостаток - бесплатная условность программы. Как я уже писал, в бесплатной версии программы можно использовать до 5 элементов интерфейса. Полная версия программы не имеет никаких ограничений, стоит 379 рублей для ОС Android и 7.99$ для iOS. Второй недостаток - при построении интерфейса необходимо подключение к интернету.