• Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
Админ

Управление Omega 2 через WebSocket-сервер

1 сообщение в этой теме

Всем привет!

Сегодня мы рассмотрим простой, но интересный пример коммуникации с Омегой через WebSocket.

omega2-tornado-websocket-example.gif

Для начала определимся, что нам необходимо для этого проекта:

  • Onion Omega2+
  • Onion Omega2 Expansion Dock
  • Onion Omega2 OLED Display

Можно использовать и Omega2 (вместо Omega2+), но необходимо будет расширить память.

В проекте будет использоваться Python 2.7+. Итак, начнем.

Подключаемся к Омеге и прописываем следующие команды:

opkg update
opkg install python python-pip pyOledExp

Вышеупомянутые команды установят Python вместе с менеджером пакетов PIP и модулем OLED Python. Используя pip, мы можем скачать пакет websocket под названием Tornado. Его можно установить, выполнив следующую команду:

pip install tornado

Принимающим концом нашего websocket-соединения будет websocket-сервер. Клиенты, такие как веб-браузеры, мобильные приложения, игры и т. д., могут подключаться к нему и отправлять ему сообщения. Далее принимается решение, что делать с этим сообщением, должно ли оно выполнять какое-то действие или возвращаться обратно каким-то другим сообщением.

Создадим новый файл на Вашей Омеге, к примеру по адресу /root/example.py. Как работать с файловой системой рассказано здесь: 

И наполняем файл следующим кодом:

from OmegaExpansion import oledExp
import tornado.ioloop
import tornado.websocket

class IoTWebsocket(tornado.websocket.WebSocketHandler):

    def check_origin(self, origin):
        return True

    def open(self):
        print("Websocket Opened")

    def on_message(self, message):
        oledExp.clear()
        oledExp.setCursor(3, 0)
        oledExp.write("RECEIVED MESSAGE:")
        oledExp.setCursor(4, 0)
        oledExp.write(message)

    def on_close(self):
        print("Websocket Closed")

def make_app():
    return tornado.web.Application([
        (r"/", IoTWebsocket),
    ])

if __name__ == "__main__":
    oledExp.driverInit()
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

Немного подробнее о коде. Сначала мы импортируем модуль OLED вместе с Tornado. Затем мы создаем класс, называемый IoTWebsocket, который будет действовать в качестве маршрута, когда Tornado определит, что это соединение с websocket. Этот класс IoTWebsocket будет следить за событиями open, close и messaging. Поскольку наш клиент будет находиться на другом хосте и порту, мы также сообщаем Tornado, что мы хотим разрешить перекрестные подключения.

Когда клиент отправляет сообщение Omega2, мы определяем позицию курсора OLED и печатаем сообщение на экране.

При запуске приложения мы инициализируем экран и запускаем наш сервер по адресу http: //omaga-yyy.local: 8888, где yyy - это аппаратный адрес вашего устройства.

Наше Python-приложение можно запустить на Omega2, выполнив следующую команду:

python /root/example.py

Теперь нам нужно "состряпать" простенький клиент, для отправки сообщения на наше устройство. Для этого на компьютере создаем HTML файл со следующим кодом (только поменяйте адрес на тот, что у Вас):

<!DOCTYPE html>
<html lang="en">
    <body>

        <input type="text" placeholder="Message" id="textbox">
        <button id="button">Send</button>

        <script>
            var socket = new WebSocket("ws://omega-6c4f.local:8888");
            var button = document.getElementById("button");

            button.addEventListener("click", function(event){
                var text = document.getElementById("textbox").value;
                socket.send(text);
                document.getElementById("textbox").value = "";
            });

            window.onbeforeunload = function(event){
                socket.close();
            }
        </script>

    </body>
</html>

В приведенном выше HTML-коде у нас есть поле ввода и кнопка отправки. Во встроенном скрипте мы устанавливаем соединение с сервером Omega2 Tornado и "прослушиваем" клики на кнопке. Если обнаружено нажатие, мы отправляем значение сообщения на другой конец нашего открытого сокета. Полученное сообщение будет представлено на OLED-дисплее.

Подведем итоги

Вы только что видели, как связываться с вашим Onion Omega2 через WebSockets. В этом примере мы взяли информацию WebSocket и отобразили его на OLED-дисплее, но эти концепции можно легко применить и к более сложным проектам, таким как домашняя автоматизация, связь с робототехникой или что-то еще. Например, если у вас есть датчики для Omega2, вы можете отправлять свои данные в режиме реального времени другим пользователям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас