Как я сделал Wi-Fi весы, ни откуда не уволился, а про жизнь вообще молчу Страница 1 из 6





Из заголовка нетрудно видеть, что на это приключение меня сподвигло банальное стремление сплагиатить заголовок парней из Madrobots. А это ведь действительно было приключение: одна только история с затянувшейся покупкой INA125U настолько занудна, что может свести с ума кого угодно, кроме меня. Впрочем, возможно, я кое-чего о себе до сих пор не знаю.

Итак, весы. Я, как обычно, сделал все неправильно. А именно — не стал даже смотреть на то, что умеют делать типичные на текущий момент развития интернета вещей представители этого отряда, так сказать, скалярных. Поэтому мои весы умеют раздельно взвешивать трех разных особей человека (меня, жену и сферического гостя в вакууме), а также — пятерых кошачьих. Результаты озвучиваются близлежащим смартфоном и публикуются в табличке Google.

Ну а теперь — о том, как это сделать, имея на руках весы из ИКЕА, операционный усилитель TI INA125, Arduino Pro Mini, преобразователь Serial — Wi-Fi HiLink HLK-RM04, немного прочей рассыпухи и здоровенное шило в заднице.

Есть контакт!

Собственно, когда я покупал на DX.com преобразователь Serial — Wi-Fi, то был не столько очарован его возможностями (я о них тогда имел крайне туманное понятие), сколько ценой — по сравнению с тем же Wi-Fi-шилдом для Arduino. Разумеется, вскоре выяснилось, что различие в цене не просто так: из коробки преобразователь этот мало чем напоминает шилд. И, да, понимаю — это для вас очевидно, а для меня было откровением, что никаких GET/POST просто так не будет.

Тем не менее я почти сразу после покупки попробовал HLK-RM04 в деле. Сначала — и вовсе без микроконтроллера. Достаточно лишь подключить питание (5В) и пойти по дефолтному адресу, который указан в руководстве. Там же, после некоторых сомнений (как бы чего не запороть) вбил свои настройки Wi-Fi и выдал преобразователю статический IP, чтобы потом не искать его по всей сети.

Вот такие получились настройки. Забегая вперед — это полный комплект настроек для весов (IP и SSID подставите свои, а вот скорость порта довольно важна — на этой скорости HLK-RM04 будет общаться с контроллером):



На втором этапе подключил к контроллеру и посмотрел, что можно сделать без библиотеки и без усилий. Оказалось, что если переключить его в режим сервера, подключить к последовательному порту Arduino, и написать код, который что-то периодически печатает в этот самый порт, то потом в браузере можно посмотреть печатаемое. Тоже, в принципе, неплохо, но не слишком вдохновляло. Тем не менее, я это запомнил на самый крайний случай.

В общем, так бы и валялся HLK-RM04 в пыльной коробке, если бы не Madrobots. Я рассматривал любые варианты: и заставить преобразователь работать веб-клиентом, и, если не получится, то хотя бы забирать с него данные через Tasker на смартфоне, и тем же Tasker публиковать, куда мне надо. По счастью для первого варианта нашлась подходящая библиотека WiFiRM04 , которая в конечном итоге ведет себя практически как библиотека Wi-Fi для Arduino.

Есть, конечно, и специфика. Библиотека эта собрана в расчете на Arduino Mega, у которой и оперативной памяти много, и последовательных портов — выше крыши. Поэтому автор библиотеки по дефолту широким жестом использовал два порта Arduino Mega для общения с HLK-RM04, и в остатке имел подключение к десктопу через USB для одновременной отладки.

И, кстати, с учетом также по умолчанию включенного модуля отладки, даже крошечная программа с участием библиотеки WiFiRM04 компиллируется в чуть меньше 30КБ, так что перспективы миграции на Arduino Pro Mini казались немного сомнительными. Однако есть и хорошие новости: автор все же предусмотрел и работу с одним портом, и выключение отладочного модуля.

О первом написано на GitHub, а о втором я узнал из форума Arduino.cc.

И все же, если честно, отлаживался я на Mega, потому что показалось очень уж муторно постоянно отключать-подключать HLK-RM04 — ведь на Pro Mini он занимает единственный порт, поэтому даже для банальной загрузки новой версии программы преобразователь нужно отключать. Но есть и хитрость: если после загрузки программы в Pro Mini подключить и HLK-RM04, и одновременно десктоп с монитором порта, то видно, что именно контроллер отправляет преобразователю. А это позволяет понять, в каком вообще состоянии тот находится.

В сухом остатке для адаптации WiFiRM04 под Arduino Pro Mini потребовалось:

1) В at_drv.cpp сделать так:

<code class="cpp">#define DEFAULT_BAUD1			9600 #define DEFAULT_BAUD2			9600 </code>

2) Там же — вот так:

<code class="cpp">// use Serial1 as default serial port to communicate with WiFi module #define AT_DRV_SERIAL Serial // use Serial2 to communicate the uart2 of our WiFi module #define AT_DRV_SERIAL1 Serial </code>

3) Там же — закомментировать #define _DEBUG_

<code class="cpp">// #define _DEBUG_ </code>

4) Там же — не забыть поставить свой любимый цифровой пин в #define ESCAPE_PIN

<code class="cpp">#define ESCAPE_PIN				4 </code>

3) В wl_definitions.h изменить MAX_SOCK_NUM на 1

В обоих случаях, что с Mega, что с Pro Mini работоспособность этого гибрида ужа с ежом проверял на практике — отправлял запросы на сервер, который мог фиксировать их получение.

Своя ноша то тянет, то не тянет

На следующем этапе я занялся изучением вопроса о получении данных с весов. Теория гласила, что в зависимости от типа весы комплектуются одним, двумя или четырьмя тензодатчиками. Открыв обычные икеевские весы я осознал, что здесь, в общем, классическая схема: каждой пятке — по датчику, то есть всего четыре датчика. Смущало только количество проводов.

. оригинальная плата весов
  • 1657
  • 28/05/2014


Поделись



Подпишись



Смотрите также