Su consiglio di un amico mi sono comprato i trasmettitori 433 MHz 500 mA della Drotek che dovevano essere basati sul firmware open source Sik
Il dispositivo e' arrivato senza nessun tipo di documentazione (CD, Libro), sul sito non ci sono riferimenti alla documentazione. Ho provato a contattare direttamente Drotek e devo ammettere che questa ditta non ha assolutamente nessuna assistenza clienti (la prossima volta compro in Cina...tanto e' uguale a parte il prezzo)
Sulla base delle poche informazioni fornite dal mio amico mi sono rimboccato le maniche ed ho cercato di prendere il controllo del dispositivo.
Connesso il trasmettitore ad una CentOs 7 via microUsb il dispositivo compare come seriale virtuale.
------------------------------------------------
Jun 29 15:31:31 localhost kernel: usb 1-1.2: new full-speed USB device number 3 using ehci-pci
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device found, idVendor=10c4, idProduct=ea60
Jun 29 15:31:31 localhost kernel: usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Product: CP2102 USB to UART Bridge Controller
Jun 29 15:31:31 localhost kernel: usb 1-1.2: Manufacturer: Silicon Labs
Jun 29 15:31:31 localhost kernel: usb 1-1.2: SerialNumber: 0001
Jun 29 15:31:31 localhost mtp-probe: checking bus 1, device 3: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2"
Jun 29 15:31:31 localhost mtp-probe: bus: 1, device: 3 was not an MTP device
Jun 29 15:31:32 localhost kernel: usbcore: registered new interface driver cp210x
Jun 29 15:31:32 localhost kernel: usbserial: USB Serial support registered for cp210x
Jun 29 15:31:32 localhost kernel: cp210x 1-1.2:1.0: cp210x converter detected
Jun 29 15:31:32 localhost kernel: usb 1-1.2: cp210x converter now attached to ttyUSB1
------------------------------------------------
a questo punto rimane il problema di programmarlo e ricevere/inviare i dati
Se si cerca il firmware Sik si attiva a questa pagina su GitHub. Nella sottocartella Firmware/Tools ci sono dei comodi script Python ed in particolare leggendo il codice del programma show_regs.py sembra quello utile a capire se il dispositivo risponde
per fare funzionare questo script si devono soddisfare le dipendenze con PySerial (pip install pyserial) e Pexpect. Per questa seconda libreria ho avuto qualche problema con pip ed ho usato l'installazione standard partendo da http://pexpect.sourceforge.net/doc/#download ed installando con python setup.py install
A questo punto digitando
[root@localhost tools]# ./show_regs.py /dev/ttyUSB1
si hanno le seguenti risposte
------------------------------------------------showing registers on /dev/ttyUSB1
+++
ATI
OK
ATI5
ATI
SiK 1.9 on HM-TRP
ATI5
S0:FORMAT=25
S1:SERIAL_SPEED=57
S2:AIR_SPEED=64
S3:NETID=25
S4:TXPOWER=11
S5:ECC=1
S6:MAVLINK=1
S7:OPPRESEND=1
S8:MIN_FREQ=433050
S9:MAX_FREQ=434790
S10:NUM_CHANNELS=10
S11:DUTY_CYCLE=100
S12:LBT_RSSI=0
S13:MANCHESTER=0
S14:RTSCTS=0
S15:MAX_WINDOW=131
ATI6
ATI6
silence_period: 404
tx_window_width: 6978
max_data_packet_length: 118
ATI7
ATI7
L/R RSSI: 54/0 L/R noise: 66/0 pkts: 0 txe=0 rxe=0 stx=0 srx=0 ecc=0/0 temp=-276 dco=0
ATO
------------------------------------------------
La spiegazione dei parametri ripresa da qui e' la seguente
FORMAT
- this is for EEPROM format version. Don’t change itSERIAL_SPEED
- this is the serial speed in ‘one byte form’ (see below)AIR_SPEED
- this is the air data rate in ‘one byte form’NETID
- this is the network ID. It must be the same for both your radiosTXPOWER
- this is the transmit power in dBm. The maximum is 20dBmECC
- this enables/disables the golay error correcting codeMAVLINK
- this controls MAVLink framing and reporting. 0=no mavlink framing, 1=frame mavlink, 2=low latency mavlinkMIN_FREQ
- minimum frequency in kHzMAX_FREQ
- maximum frequency in kHzNUM_CHANNELS
- number of frequency hopping channelsDUTY_CYCLE
- the percentage of time to allow transmitLBT_RSSI
- Listen Before Talk threshold (see docs below)MAX_WINDOW
- max transmit window in msecs, 131 is the default, 33 recommended for low latency (but lower bandwidth)
Power (dBm) | Power (milliWatts) |
---|---|
1 | 1.3 |
2 | 1.6 |
5 | 3.2 |
8 | 6.3 |
11 | 12.5 |
14 | 25 |
17 | 50 |
20 | 100 |
quindi il modulo radio utilizza effettivamente un firmware SiK e si chiama HM-TRP.
La velocita' di download di default e' 57600
A questo punto ho provato a collegare il secondo modulo via USB ma nessuna risposta (led spenti).. Dronetek non mi ha spiegato il motivo di tale configurazione (ad occhio il modulo da collegare non via Usb e' quello che si monta sul drone mentre l'altro, via Usb, e' da connettere al PC/Tablet di controllo del drone)
Ho provato allora ad alimentare il modulo tramite una Arduino ed il connettore DF13
Visto che il modulo si e' acceso ho caricato un semplice sketch di SoftwareSerial sulla Arduino per mandare una stringa ed ho messo in ascolto con Minicom (57600 8N1) il secondo modulo sulla Linux Box collegato via serial
--------------------------------------------
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
mySerial.begin(57600);
}
void loop() // run over and over
{
mySerial.println("Prova trasmissione");
}
--------------------------------------------
Si e' quindi acceso il led rosso se entrambi i dispositivi radio ed sono riuscito a vedere il flusso dati
Per configurare i moduli radio (per esempio per cambiare il baud rate oppure la potenza di trasmissione) si puo' utilizzare il software Mission Planner
Si seleziona la porta seriale, si seleziona Inital Setup, Sik Radio, Local., Carica Settaggi.
Una soluzione alternativa e' APM Planner
In una prova con potenza di trasmissione 11 corrispondente a 12 mW si riesce a ricevere il segnale fino ad almeno 150 m. In Italia il massimo valore di potenza ammesso per la trasmissione radio e' di 100 mW ma il trasmettitore puo' arrivare a 500 mW