Отправка нескольких данных из BNO055 IMU в BridgeClient на Yun

У меня есть Arduino Yun, который через I2C подключается к коммутационной плате Adafruit BNO055.

Моя цель — использовать Python Flask в сочетании с BridgeServer и BridgeClient для получения информации датчика от ATmega32u4 микроконтроллер к микропроцессору и использовать HTML5 Server Side Event (SSE) для отображения информации от датчиков в реальном времени на сетевых интерфейсах.

Я хотел бы показать углы Эйлера и значения линейного ускорения:

  1. заголовок
  2. презентация
  3. ролл
  4. linear_accerlation_x
  5. linear_acceleration_y
  6. linear_acceleration_z

Пример аналогичной концепции можно получить на сайте Smart MeasuringCup">Smart Measuring Cup от Adafruit. Однако в скетче кода пользователь отправляет только одно значение:

BridgeClient client;
....
client.println(volume, 5);

И в конце Python Flask код открывает сокет и использует метод makefile() для чтения значения

def yunserver_sse():
    try:
        # Connect to YunServer instance that's listening on localhost.
        soc = socket.create_connection(('localhost', 5678))
        socfile = soc.makefile()
        while True:
            # Get data from server.
            line = socfile.readline()
            # Stop if the server closed the connection.
            if not line:
                raise StopIteration
            # Send the data to the web page in the server sent event format.
            yield 'data: {0}\n\n'.format(line)
            # Sleep so the CPU isn't consumed by this thread.
            time.sleep(0)
    except socket.error:
        # Error connecting to socket. Raise StopIteration to quit.
raise StopIteration

Вместо того, чтобы отправлять только один измеренный параметр, как я могу отправить все вышеупомянутые 6 одновременно?

примечание

Я пробовал использовать библиотеку ArduinoJson, но мне сложно анализировать JSON на конце Python Flask, поскольку readline() ожидает \n в конце строки.

, 👍1


1 ответ


Лучший ответ:

0

Очевидно, решением моей проблемы был простой client.println() после того, как мой JSON был готов к печати в BridgeClient.

Фрагмент:

root.printTo(client); client.println();

где root — это DynamicJsonBuffer из библиотеки ArduinoJson. client.println() немедленно выведет \n, и это будет прочитано кодом Python readline().

,