Привет. Подскажите, пожалуйста, как сделать сабж. Скрипт отправки с Arduino:
#include <RH_ASK.h>
#define SPEED (uint16_t)1200
#define RX_PIN (uint8_t)11
#define TX_PIN (uint8_t)12
#define PTT_PIN (uint8_t)10
#define PTT_INVERTED false
/*
Создаём экземпляр класса RH_ASK передатчика
*/
RH_ASK driver(SPEED, RX_PIN, TX_PIN, PTT_PIN, PTT_INVERTED);
void setup() {
pinMode(7, INPUT);
/* задаем скорость общения с компьютером */
Serial.begin(115200);
/* Инициализируем передатчик */
if (!driver.init()) {
Serial.println(F("RF init failed!"));
while (true) {
delay(1);
}
}
/* Настройка встроенного светодиода */
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
uint8_t data = 100;
/* Гасим светодиод */
digitalWrite(LED_BUILTIN, LOW);
/* Передаём данные */
driver.send((uint8_t*)&data, sizeof(data));
/* Ждем пока передача будет окончена */
//driver.waitPacketSent();
/* Выводим в терминал отправленные данные */
Serial.print("TX: ");
Serial.println(data);
/* Включаем светодиод */
digitalWrite(LED_BUILTIN, HIGH);
/* Ждём */
delay(100);
}
Этот код отправляет число 100 через передатчик wl102-341 на Raspberry Pi с приёмником wl101-341 На Raspberry запускаю скрипт:
#!/usr/bin/python3
from datetime import datetime
import matplotlib.pyplot as pyplot
import RPi.GPIO as GPIO
import time
RECEIVED_SIGNAL = [[], []] #[[time of reading], [signal reading]]
MAX_DURATION = 0.8
RECEIVE_PIN = 23
if __name__ == '__main__':
GPIO.setmode(GPIO.BCM)
GPIO.setup(RECEIVE_PIN, GPIO.IN)
cumulative_time = 0
beginning_time = datetime.now()
print('**Started recording**')
while cumulative_time < MAX_DURATION:
time_delta = datetime.now() - beginning_time
RECEIVED_SIGNAL[0].append(time_delta)
RECEIVED_SIGNAL[1].append(GPIO.input(RECEIVE_PIN))
cumulative_time = time_delta.seconds
print('**Ended recording**')
print(len(RECEIVED_SIGNAL[0]), 'samples recorded')
GPIO.cleanup()
print('**Processing results**')
for i in range(len(RECEIVED_SIGNAL[0])):
RECEIVED_SIGNAL[0][i] = RECEIVED_SIGNAL[0][i].seconds + RECEIVED_SIGNAL[0][i].microseconds/1000000.0
print('**Plotting results**')
pyplot.plot(RECEIVED_SIGNAL[0], RECEIVED_SIGNAL[1])
pyplot.axis([0, MAX_DURATION, -1, 2])
# pyplot.show()
figure = pyplot.gcf()
figure.set_size_inches(25, 6)
pyplot.savefig('ggggg.png', dpi = 96)
for i in range(0, len(RECEIVED_SIGNAL[0])):
print(RECEIVED_SIGNAL[0][i], RECEIVED_SIGNAL[1][i])
В итоге получаю примерно 36000 бит данных. В них определённо есть осмысленная информация. На картинке это выглядит примерно так:
Видно 6 с половиной пакетов. А вот расшифровать и вытащить данные из этого набора бит не знаю как. Помогите разобраться. Прилагаю выхлоп скрипта здесь https://drive.google.com/file/d/1hXMgCI-iHzWrIr2mFiSHJGQqLaWGFp1-/view?usp=sharing