qczek lrs – 433mhz 1w (30dbm) lora rc link with telemetry - новая народная?

kox58

А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.

whoim
kox58:

А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.

Я про наземную станцию, на аппарате то зачем дисплей…

tuskan
kox58:

А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.

и что он там выводит?

INAV supports displays to provide information to you about your aircraft and iNav state.
When the aircraft is armed, an “Armed” message is displayed. When it is disarmed, a summary page is displayed. Page cycling has been removed and no other information is currently available

я б сделал себе отдельный телеметрийный экран с удовольствием

whoim

Ну так то на телефоне вся телеметрия по идее, это я так, дисплей некуда девать. Но в 168ю мегу не лезет парсер протокола, надо 328ю…

kox58
tuskan:

и что он там выводит?

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

gpp
kox58:

А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.

Где? На ретрансляторе?

whoim:

Есть идея воткнуть ардуинку буфером между mavlink tx модуля и блютус с дисплеем, парсить протокол, типа резервный вариант инфы. Отображать ток последнее достоверное, может даже в епром писать… Что думаете?

Тоже давно думаю об этом. Координаты последние, напряжение там… и т.д… Как у Кросфайр 😃)

whoim:

Но в 168ю мегу не лезет парсер протокола, надо 328ю…

Что за библиотека? Тоже хочу в ретранслятор встроить OLED

whoim

Начал с этого: locarbftw.com/understanding-the-arduino-mavlink-li…
Без посылки запроса ток

Продолжу уже после сборки квадрика, буду сразу стараться на 433 его посадить. Мегу эту хотел заюзать для тбекона грин, теперь в раздумьях, что важнее)
Новая пока дойдет…

whoim
gpp:

Тоже хочу в ретранслятор встроить OLED

Предлагаю объеденится. Что есть:

  1. библиотека для олед работает, буковки есть
  2. библиотека для парсинга мавлинк компилится, в основах вроде разобрался. Пока нет возможности подключить к контроллеру, но скоро

Итак, qczek восстанавливает эти msg_id (сообщения) мавлинка с inav: HEARTBEAT, ATTITUDE, POSITION_INT, SYS_STATUS, RC_CHANNELS_RAW
Вот полный список оных: groups.google.com/forum/#!topic/mavlink/1zgHUM67E-…
В библиотеке на каждый пакет заведен свой файлик h в /common, например из примера выше это mavlink_msg_gps_raw_int.h, там можно посмотреть структуру, ну и процедуру, которая парсит данные и сливает в эту структуру, например mavlink_msg_gps_raw_int_decode.

Однако, с этим мы уже пролетаем - этот пакет qczek не передает. Передает видимо MAVLINK_MSG_ID_GLOBAL_POSITION_INT 33, что описан в mavlink_msg_global_position_int.h

Уже из этого пакета мы получаем

uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters), above MSL
int32_t relative_alt; ///< Altitude above ground in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
uint16_t hdg; ///< Compass heading in degrees * 100, 0.0…359.99 degrees. If unknown, set to: 65535

Теперь полезен будет MAVLINK_MSG_ID_SYS_STATUS 1

uint32_t onboard_control_sensors_present; ///< Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_enabled; ///< Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_health; ///< Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint16_t load; ///< Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
uint16_t voltage_battery; ///< Battery voltage, in millivolts (1 = 1 millivolt)
int16_t current_battery; ///< Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
uint16_t drop_rate_comm; ///< Communication drops in percent, (0%: 0, 100%: 10’000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_comm; ///< Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_count1; ///< Autopilot-specific errors
uint16_t errors_count2; ///< Autopilot-specific errors
uint16_t errors_count3; ///< Autopilot-specific errors
uint16_t errors_count4; ///< Autopilot-specific errors
int8_t battery_remaining; ///< Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery

отсюда мы вытащим батарейку.
Проблема: нет готового значения количества спутников… судя по описанию того, что сейчас пропускает qczek
А скорости размазаны по xyz и в м/сек, надо видимо подумать, какую брать… видимо по x, то есть

packet.vx*3.6

итого пока получается что то такое

#include <Wire.h>
#include “SSD1306Ascii.h”
#include “SSD1306AsciiWire.h”
#include <mavlink.h>

#define I2C_ADDRESS 0x3C
#define RST_PIN -1
SSD1306AsciiWire oled;

mavlink_message_t msg;
mavlink_status_t status;
//__mavlink_sys_status_t
int8_t battery_remaining;
uint8_t voltage_battery;
int16_t current_battery;
//__mavlink_global_position_int_t
int32_t lat,lon,alt,relative_alt;
int16_t vx, vy, vz;
uint16_t hdg;

//------------------------------------------------------------------------------
void setup() {
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x32, I2C_ADDRESS);
oled.clear();
oled.setFont(font8x8);
oled.set2X();
oled.println(“WAIT FOR”);
oled.println(“MAVLINK”);
oled.set1X();
//
Serial.begin(57600);
}
//------------------------------------------------------------------------------
void loop() {
while(Serial.available()) {
uint8_t c= Serial.read();
Serial.write©;
if(mavlink_parse_char(MAVLINK_COMM_0, c, &msg, &status)) {
switch(msg.msgid) {
case MAVLINK_MSG_ID_GLOBAL_POSITION_INT: {
mavlink_global_position_int_t packet;
mavlink_msg_global_position_int_decode(&msg, &packet);
if(packet.hdg == 65535) packet.hdg = 0;
lat = packet.lat;
lon = packet.lon;
alt = packet.alt;
relative_alt = packet.relative_alt;
vx = packet.vx;
vy = packet.vz;
vy = packet.vz;
hdg = packet.hdg;
}
case MAVLINK_MSG_ID_SYS_STATUS: {
__mavlink_sys_status_t packet;
mavlink_msg_sys_status_decode(&msg, &packet);
battery_remaining = packet.battery_remaining;
voltage_battery = packet.voltage_battery;
current_battery = packet.current_battery;
}
break;
}//switch
oled.clear();
oled.setFont(font5x7);
oled.println((String)“GPS:”+lat+(String)" “+lon);
oled.println((String)“SPEED:”+vx*3.6+(String)” ALT:“+relative_alt);
oled.println((String)“HDG:”+hdg+(String)” V:“+voltage_battery/100+(String)” R: “+battery_remaining+(String)”%");
oled.println((String)“BAT: 6.8v 76% ||||_”);
}//if
}//while
}

Едрит, оно парсит протокол! Надпись wait for mavlink из скетча исчезает ток при успешном парсинге хоть одного сообщения

whoim

Ну и надо это по хорошему на таймер перевесить, наверное, чтоб затыков с пересылкой в тх не было. Либо вообще тх не юзать, rx ардуины и бт модуля вместе скрутить да и все.

Serpent
Роман1971:

Там 16,4 мм получается . Середина 433.450 мгц примерно

Вы миллиметры с сантиметрами не попутали?

Роман1971

ну да 16,4 см, при условии, что частоты по умолчанию не трогать.

whoim

Судя по чейнжлогам старых версий, поддерживается больше messages от mavlink, чем написано. Думаю, я как подсоберу в кучу всё, посмотрю что приходит через qczek телеметрию.

Роман1971:

ну да 16,4 см, при условии, что частоты по умолчанию не трогать.

Я на 1мгц все пока задрал

gpp
whoim:

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

TX вообще не использовать. Телеметрия же однонаправленная. К тому же если использовать s.bus, то TX занят.

Главное принимать координаты и писать их в EEPROM. В случае краша будут последние координаты. Информацию писать при включении пока не будет получен первый пакет.

whoim

Да, логика хорошая. Я ещё мечтаю прикрутить компас, вычислять азимут между домашними координатами и uav, и сервой поворачивать антенну)

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

gpp

Можно вообще сделать меню и настраивать ретранслятор без ПК 😃))

whoim
gpp:

Можно вообще сделать меню и настраивать ретранслятор без ПК 😃))

Давайте браться) в 328 меге места валом, 40% пока занято)

fpv_mutant

RSSI в режиме “pocket loss” практически не имеет линейности,99% мгновенно переходят в FS,м.б. дело в проходящей радиотрассе.Отлетал на 7км,8ххМгц пока радует,потери связи были кратковременные в одном месте.

whoim

я правильно понимаю, что на приемнике (на коптере) CPPM снимается с модуля с пина AUX, а если настроен конфигураторм sbus - то с TX?

gpp

Всегда на приемнике снимается сигнал с AUX

Роман1971

Кстати там желательно снимать по протоколу S.BUS. CPPM у меня почему то не пашет на приемнике. Хотя на передатчике именно так приходит. Если отключить режим молчания, то начинает CPPM работать.

whoim

Аппаратура никак не доедет, но мавлинк сквозь lsr уже идёт. Внизу тоже буду cppm, вверху под sbus приготовил

А rssi лучше аналоговый развести проводком или софтово можно, работает ли фича?