1i7 (1i7) wrote,
1i7
1i7

Categories:

Управление платой ChipKIT со смартфона Android через WiFi

Завершающий и обобщающий пост из серии про управление платами ChipKIT со смартфона Android через WiFi напрямую без посредников в виде Сервера Роботов или шнура USB.

Управление платой ChipKIT WF32 со смартфона Android через WiFi from 1i7 on Vimeo.


ChipKIT WF32-TcpServer-Android-ledon.jpg

Связать плату ChipKIT и смартфон Android через WiFi напрямую
1) ChipKIT: подключение к Вайфай
2) Управление платой ChipKIT со смартфона Android через WiFi: робот-плата
3) Управление платой ChipKIT со смартфона Android через WiFi: пульт Android

Пример: Робот Машинка управляется с пульта на смартфоне Андроид через WiFi

Исходники
прошивка для платы ChipKIT: chipkit-server-wifi/chipkit_tcp_server_slave
приложение Андроид: chipkit-server-wifi/AndroidTcpClientMaster

Пульт для Робота Машинки: Робот Машинка/прошивки/robot_pult



Предварительные приготовления

Для запуска примера необходимо.

0) Нужна плата из серии ChipKIT, которая умеет работать с WiFi (на аналогичных платах Arduino этот код не заработает): ChipKIT Uno32+WiFi Shield, ChipKIT WF32 или ChipKIT Wi-FIRE.

1) Лабораторная работа: Подключение платы ChipKIT WF32 к точке доступа WiFi.

2) Смартфон или планшет с операционной системой Google Android.

3) Плата и устройство Android должны находиться в одной локальной сети. Рекомендую использовать точку доступа на этом же смартфоне Android: это удобно, т.к. на смартфоне легко настраивать параметры сети, также смартфон и плату будет легко переносить между помещениями. Можно также использовать обычной домашний роутер, но в этом случае нужно убедиться, что к нему подключены и плата и смартфон.

Алгоритм
С точки зрения робота (платы ChipKIT WF32):
Плата подключается к точке доступа WiFi и просит назначить ей статический IP-адрес 192.168.43.117, после этого ожидает подключения пульта на порт 44114. После подключения пульта плата принимает команды - включить или выключить лампочку. Если пульт не отправлял команды более 10ти секунд (параметр настраивается), сессия общения считается оконченной, плата разрывает соединение и ожидает подключения нового пульта.

С точки зрения пульта (смартфона Android):
Смартфон подключается к той же сети WiFi, что и плата (если это внешняя точка доступа, то к ней нужно подключиться в настройках WiFi; если точкой доступа для платы является текущий смартфон, то они уже в одной сети, никуда подключаться не нужно). После этого подключается к роботу по адресу 192.168.43.117 на порт 44114 и ожидает ввода команд от пользователя (кнопки на экране). Если пользователь нажимает кнопку (включить или выключить лампочку), пульт отправляет ее роботу по WiFi и показывает ответ. Если пользователь не отправляет команды роботу более 5ти секунд, приложение автоматически отправляет роботу команду ping для того, чтобы поддерживать сессию в активном состоянии. Если пользователь закрывает приложение, каналы связи разрываются; но даже сеанс связи не был завершен корректно, автоматическая отправка пакетов ping прекратится, сервер закроет соединение через 10 секунд.

Несколько роботов в одной сети WiFi
Важный нюанс - это необходимость назначать статический IP-адрес роботу-плате при подключении к точке доступа (по умолчанию в коде прописан 192.168.43.117). Такой подход сразу вводит неприятное ограничение: мы не можем запустить рядом два одинаковых робота, подключающихся к одной и той же точке доступа WiFi, без перепрошивки одного из них кодом с измененным IP-адресом. Однако статический адрес требуется для того, чтобы пульт на Android заранее знал, где в сети находится робот, которым он хочет управлять (этот адрес также прописан в коде приложения Android).

Мы могли бы легко сделать так, чтобы адрес робота задавался в настройках пульта пользователем, а сам робот-плата использовал бы динамический IP-адрес при подключении к точке доступа WiFi. Это позволит находиться множеству роботов в одной сети, но тогда нам придется сделать так, чтобы робот-плата каким-то образом сообщал значение полученного IP-адреса пользователю (например, выводил его на специальном экране), тк. при каждом запуске робота этот адрес может меняться, а пользователю нужно знать, какой адрес вводить в настройки пульта.

Можно придумать разные решения обозначенной проблемы, но т.к. стандартного оптимального подхода мне среди них не видится, а промежуточные компромиссы сильно усложнят пример, на этот раз смиримся с этим органичением.

Протокол
Протокол общения между роботом (плата ChipKIT WF32) и пультом (смартфон Android Ётафон): пульт отправляет команду, робот выполняет команду и присылает ответ; команды и ответы строковые.

Весь полезный функционал определим двумя основными командами:
ledon - включить лампочку;
ledoff - выключить лампочку.

Ответы от робота:
ok - в случае успеха выполнения команды;
dontunderstand - команда не распознана.

Дополнительная команда:
ping - проверить канал связи; ничего не делает, просто присылает ответ ok.

Комнаду ping можно слать от пульта к роботу при неактивности пользователя для того, чтобы поддерживать сессию связи в открытом состоянии, или проверить работоспособность робота без выполнения активных действий.

Tags: android, chipkit, типовые задачи
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments