Перевел мануал, написал простенькую программку, только не знаю как выложить на форум
Модуль LoRa E220-900T22D
Сообщений 1 страница 19 из 19
Поделиться22022-08-07 19:59:07
Перевод можно выложить на файлообменник, а здесь дать ссылку.
Листинг программы можно прямо в теле сообщения оформить как "Свернутый текст", "Цитата" или "Код".
Соответствующие "кнопочки" есть в окне Редактора сообщений...
Работа с Форумом
Поделиться32022-10-19 17:08:40
Очень интересная тема! 5-7км. дальность связи это круто 
Поделиться42022-10-26 23:45:52
Всё жду и жду эти модули...
Жесть, на радио рынке нет, может из пульта электросчётчика чего выдрать?
Кстати, в общении по UART нет контрольной суммы?
Поделиться52022-11-13 20:45:51
Получилось соединится.
Всё просто:
;Команды:
;=== С0-Запись
;=== С1-Чтение
;=== С2-Временное изменение
;=== С4-неверный формат ответа
;============ ПРОТОКОЛ EBAY ЕГО МОДЕМА
;1-Комманда
;2-Cтартовый адрес
;3-Кол-во
;4-Параметр
В ответ приходит возможность считать несколько байт сразу в ответ.
tx(0)=$c1 ; команда;
tx(1)=$00 ;стартовый адрес
tx(2)=$0A ;длина
Ответ участка кода:
Код:;=== Ev3658 EnableExplicit Enumeration #okno #polotno ;Картинка спрайта #sprite ;Окно редатора спрайтов #timerchat #com_port EndEnumeration Global x.c,y.c,w.c,h.c Global event.c Global p.c,o.c Global vrb.a,vrc.c Global Dim mem_chat.a(8193) Global trig_mem.c Global x_zoom_chat.c,y_zoom_chat.c x_zoom_chat=128*8 y_zoom_chat=64*8 x=0 y=0 w=x_zoom_chat+10 h=y_zoom_chat+200 ;---- Uart переменные Global On_uart.a Global Dim tx.a(1024) ;Буфер приёма Global tm_rx.a Global Dim rx.a(1024) Global byte_tm.a,param.a Goto PROG: ;============ ПРОТОКОЛ EBAY ЕГО ;1-Комманда ;2-Cтартовый адрес ;3-Кол-во ;4-Параметр ;Команды: ;=== С0-Запись ;=== С1-Чтение ;=== С2-Временное изменение ;=== С4-неверный формат ответа ; C0:00:03:12:34:62 - 1234 ;===== Адреса модема ;=== 00H - ч/з - H-Byte REGISTR_RX: byte_tm=3 param=$09 ;Протокол модема 2 (Чтение) tx(0)=$c1 ; команда; (C1+starting address+parameters ; C1+starting address+length+parameters tx(1)=$00 ;стартовый адрес tx(2)=$0A ;длина ;tx(3)=param ;Параметры If WriteSerialPortData(#com_port, @tx(0),byte_tm) Debug "Отправка "+Hex(tx(0))+":"+Hex(tx(1))+":"+Hex(tx(2))+":"+Hex(tx(3))+": " ;Delay(100) ;Делаем паузу EndIf Return PROG: ;Debug CPUName() p=13 If OpenSerialPort(#com_port,"COM"+Str(p),9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255) Gosub registr_rx: Debug "COM порт "+Str(p)+", отправлен запрос." on_uart=1 Else on_uart=0 EndIf If OpenWindow(#okno,x,y,w,h,"ТЕЛЕГРАФФ 868",#PB_Window_Tool|#PB_Window_SystemMenu| #PB_Window_ScreenCentered|#PB_Window_BorderLess) CreateImage(#polotno,x_zoom_chat,y_zoom_chat) ImageGadget(#sprite,4,4,x_zoom_chat,y_zoom_chat,ImageID(#polotno)) SetWindowColor(#okno, RGB(0,0,0)) StartDrawing(ImageOutput(#polotno)) ;Box(5,5,x_zoom_chat,y_zoom_chat,(RGB(10,10,10))) AddWindowTimer(#okno,#timerchat,100) trig_mem=0 For o=1 To y_zoom_chat Step 8 For p=1 To x_zoom_chat Step 8 trig_mem+1 Box(p+1,o+1,6,6,(RGB(mem_chat(trig_mem), 68, 67))) Next p Next o ;Debug trig_mem StopDrawing() SetGadgetState(#sprite,ImageID(#polotno)) Global s.s Repeat Event = WaitWindowEvent() If Event = #PB_Event_Timer And EventTimer() = #timerchat ;Таймер обработки чата EndIf ;----- UART While AvailableSerialPortInput(#com_port) ;---- Получение данных с COM порта If ReadSerialPortData(#com_port, @rx(tm_rx), 1) ;Считывание 1 байта s=s+Hex(rx(tm_rx))+":" tm_rx+1 Debug "Приём "+Str(tm_rx)+" "+s EndIf ;Если ошибка передачи байта ;Debug "Приём "+Str(tm_rx) + " "+Hex(rx(tm_rx),#PB_Byte) Wend Select Event Case #PB_Event_Gadget Select EventGadget() Case 1 CloseWindow(0) End EndSelect EndSelect Until Event = #PB_Event_CloseWindow EndIf CloseSerialPort(#com_port) End
Отредактировано Ev3658 (2022-11-13 20:46:58)
Поделиться62022-11-16 14:43:46
Угощайтесь переводом простой документации.
https://disk.yandex.ru/i/PGwrzRifkMPTPg
С конфигурацией то понятно. Но а как в целом данные то передавать? 
Поделиться72022-11-17 12:42:20
Данные оказывается просто передаются в другом режиме работы модема.
Для настройки модема я никуда не цеплял M0 и M1, это логические единицы.
Поделиться82022-11-26 20:16:41
EBYTE их технологии.....
Пришла отладочная плата на STM 8L151G4 - жуть...
Для полного счастья EBYTE модемом надо управлять и M0 и M1 - тогда можно мутить сканер.
Я не нашел как управлять M0 и M1 по UART, хотя в документации заикнулись про какой-то режим, но опять-же описание отсутствует.
Может есть у кого расширенная версия тайны EBYTE и технологий?
Сложность заключается в том, что они поставили свой микроконтроллер между трансивером и мной
Я бы использовал CTS/RTS и т.п. в UART, но думал на плате кто сделал, а сделали на STM8 и какой-то код туда впихнули.
При нажатии 2х USER кнопок у разъёма USB модуль выдаёт:
При этом нет связи с модемом. Нужно написать код под STM8 для PLC модема )))) не...это трындец.... выдрать, замногодрыжить и через 3.14 в "Телетайп" 
Отредактировано Ev3658 (2022-11-26 20:19:44)
Поделиться92023-07-02 07:30:22
Всем доброго здоровья. Подниму немного тему о ЛоРа. Прикупил модули е220-400m22s и не знаю с какой стороны к ним подойти. Читал документации и ничего не понял. Есть отважные кто на пальцах объяснит и даст пинка?)
Поделиться102023-07-06 12:34:07
Бог с ним с E220-400m22s. Кто-то же полюбому, из здесь присутствующих, налаживал связь с чипами SX126x или SX127x по SPI? Я отважился только прочитать что он шлёт при запуске. Принимается 0×А2. Во время замыкания reset на землю - 0×FF. Как писать в регистры, должны ли быть какие-то ответы и, тем более, передать что-то по радиоканалу, тёмный лес...
Поделиться112023-07-08 00:06:48
если не знаешь регистры бери готовое на С и смотри, все есть
* @brief The address of the register holding the first byte defining the CRC seed
*/
#define SX126X_REG_CRCSEEDBASEADDRESS 0x06BC
/**
* @brief The address of the register holding the first byte defining the CRC polynomial
*/
#define SX126X_REG_CRCPOLYBASEADDRESS 0x06BE
/**
* @brief The address of the register holding the first byte defining the whitening seed
*/
#define SX126X_REG_WHITSEEDBASEADDRESS 0x06B8
/**
* @brief The addresses of the registers holding SyncWords values
*/
#define SX126X_REG_SYNCWORDBASEADDRESS 0x06C0
/**
* @brief The addresses of the register holding LoRa Modem SyncWord value
* 0x1424: LoRaWAN private network,
* 0x3444: LoRaWAN public network
*/
#define SX126X_REG_LR_SYNCWORD 0x0740
/**
* @brief The address of the register holding the coding rate configuration extracted from a received LoRa header
*/
#define SX126X_REG_LR_HEADER_CR 0x0749
#define SX126X_REG_LR_HEADER_CR_POS ( 4U )
#define SX126X_REG_LR_HEADER_CR_MASK ( 0x07UL << SX126X_REG_LR_HEADER_CR_POS )
/**
* @brief The address of the register holding the CRC configuration extracted from a received LoRa header
*/
#define SX126X_REG_LR_HEADER_CRC 0x076B
#define SX126X_REG_LR_HEADER_CRC_POS ( 4U )
#define SX126X_REG_LR_HEADER_CRC_MASK ( 0x01UL << SX126X_REG_LR_HEADER_CRC_POS )
/*!
* The address of the register giving a 32-bit random number
*/
#define SX126X_REG_RNGBASEADDRESS 0x0819
/*!
* The address of the register used to disable the LNA
*/
#define SX126X_REG_ANA_LNA 0x08E2
/*!
* The address of the register used to disable the mixer
*/
#define SX126X_REG_ANA_MIXER 0x08E5
/*!
* The address of the register holding RX Gain value
* 0x94: power saving,
* 0x96: rx boosted
*/
#define SX126X_REG_RXGAIN 0x08AC
/**
* @brief Change the value on the device internal trimming capacitor
*/
#define SX126X_REG_XTATRIM 0x0911
/**
* @brief Set the current max value in the over current protection
*/
#define SX126X_REG_OCP 0x08E7
/**
* @brief WORKAROUND - Optimizing the Inverted IQ Operation, see DS_SX1261-2_V1.2 datasheet chapter 15.4
*/
#define SX126X_REG_IQ_POLARITY 0x0736
/**
* @brief WORKAROUND - Modulation Quality with 500 kHz LoRa Bandwidth, see DS_SX1261-2_V1.2 datasheet chapter 15.1
*/
#define SX126X_REG_TX_MODULATION 0x0889
/**
* @brief WORKAROUND - Better resistance to antenna mismatch, see DS_SX1261-2_V1.2 datasheet chapter 15.2
*/
#define SX126X_REG_TX_CLAMP_CFG 0x08D8
#define SX126X_REG_TX_CLAMP_CFG_POS ( 1U )
#define SX126X_REG_TX_CLAMP_CFG_MASK ( 0x0FUL << SX126X_REG_TX_CLAMP_CFG_POS )
/**
* @brief RTC control
*/
#define SX126X_REG_RTC_CTRL 0x0902
/**
* @brief Event clear
*/
#define SX126X_REG_EVT_CLR 0x0944
#define SX126X_REG_EVT_CLR_TIMEOUT_POS ( 1U )
#define SX126X_REG_EVT_CLR_TIMEOUT_MASK ( 0x01UL << SX126X_REG_EVT_CLR_TIMEOUT_POS )
/**
* @brief RX address pointer
*/
#define SX126X_REG_RX_ADDRESS_POINTER 0x0803
/**
* @brief RX/TX payload length
*/
#define SX126X_REG_RXTX_PAYLOAD_LEN 0x06BB
/**
* @brief Output disable
*/
#define SX126X_REG_OUT_DIS_REG 0x0580
#define SX126X_REG_OUT_DIS_REG_DIO3_POS ( 3U )
#define SX126X_REG_OUT_DIS_REG_DIO3_MASK ( 0x01UL << SX126X_REG_OUT_DIS_REG_DIO3_POS )
/**
* @brief Input enable
*/
#define SX126X_REG_IN_EN_REG 0x0583
#define SX126X_REG_IN_EN_REG_DIO3_POS ( 3U )
#define SX126X_REG_IN_EN_REG_DIO3_MASK ( 0x01UL << SX126X_REG_IN_EN_REG_DIO3_POS )
/**
* @brief TX bitbang A
*/
#define SX126X_REG_BITBANG_A_REG 0x0680
#define SX126X_REG_BITBANG_A_REG_ENABLE_POS ( 4U )
#define SX126X_REG_BITBANG_A_REG_ENABLE_MASK ( 0x07UL << SX126X_REG_BITBANG_A_REG_ENABLE_POS )
#define SX126X_REG_BITBANG_A_REG_ENABLE_VAL ( 0x01UL << SX126X_REG_BITBANG_A_REG_ENABLE_POS )
/**
* @brief TX bitbang B
*/
#define SX126X_REG_BITBANG_B_REG 0x0587
#define SX126X_REG_BITBANG_B_REG_ENABLE_POS ( 0U )
#define SX126X_REG_BITBANG_B_REG_ENABLE_MASK ( 0x0FUL << SX126X_REG_BITBANG_B_REG_ENABLE_POS )
#define SX126X_REG_BITBANG_B_REG_ENABLE_VAL ( 0x0CUL << SX126X_REG_BITBANG_B_REG_ENABLE_POS )
/**
* @brief Number of symbols given as SX126X_REG_LR_SYNCH_TIMEOUT[7:3] * 2 ^ (2*SX126X_REG_LR_SYNCH_TIMEOUT[2:0] + 1)
*/
#define SX126X_REG_LR_SYNCH_TIMEOUT 0x0706
/**
* @brief Base address of the register retention list
*/
#define SX126X_REG_RETENTION_LIST_BASE_ADDRESS 0x029F
/**
* @brief GFSK node address
*
* @remark Reset value is 0x00
*/
#define SX126X_REG_GFSK_NODE_ADDRESS 0x06CD
/**
* @brief GFSK broadcast address
*
* @remark Reset value is 0x00
*/
#define SX126X_REG_GFSK_BROADCAST_ADDRESS 0x06CE
/*
SX126X_SET_SLEEP = 0x84,
SX126X_SET_STANDBY = 0x80,
SX126X_SET_FS = 0xC1,
SX126X_SET_TX = 0x83,
SX126X_SET_RX = 0x82,
SX126X_SET_STOP_TIMER_ON_PREAMBLE = 0x9F,
SX126X_SET_RX_DUTY_CYCLE = 0x94,
SX126X_SET_CAD = 0xC5,
SX126X_SET_TX_CONTINUOUS_WAVE = 0xD1,
SX126X_SET_TX_INFINITE_PREAMBLE = 0xD2,
SX126X_SET_REGULATOR_MODE = 0x96,
SX126X_CALIBRATE = 0x89,
SX126X_CALIBRATE_IMAGE = 0x98,
SX126X_SET_PA_CFG = 0x95,
SX126X_SET_RX_TX_FALLBACK_MODE = 0x93,
// Registers and buffer Access
SX126X_WRITE_REGISTER = 0x0D,
SX126X_READ_REGISTER = 0x1D,
SX126X_WRITE_BUFFER = 0x0E,
SX126X_READ_BUFFER = 0x1E,
// DIO and IRQ Control Functions
SX126X_SET_DIO_IRQ_PARAMS = 0x08,
SX126X_GET_IRQ_STATUS = 0x12,
SX126X_CLR_IRQ_STATUS = 0x02,
SX126X_SET_DIO2_AS_RF_SWITCH_CTRL = 0x9D,
SX126X_SET_DIO3_AS_TCXO_CTRL = 0x97,
// RF Modulation and Packet-Related Functions
SX126X_SET_RF_FREQUENCY = 0x86,
SX126X_SET_PKT_TYPE = 0x8A,
SX126X_GET_PKT_TYPE = 0x11,
SX126X_SET_TX_PARAMS = 0x8E,
SX126X_SET_MODULATION_PARAMS = 0x8B,
SX126X_SET_PKT_PARAMS = 0x8C,
SX126X_SET_CAD_PARAMS = 0x88,
SX126X_SET_BUFFER_BASE_ADDRESS = 0x8F,
SX126X_SET_LORA_SYMB_NUM_TIMEOUT = 0xA0,
// Communication Status Information
SX126X_GET_STATUS = 0xC0,
SX126X_GET_RX_BUFFER_STATUS = 0x13,
SX126X_GET_PKT_STATUS = 0x14,
SX126X_GET_RSSI_INST = 0x15,
SX126X_GET_STATS = 0x10,
SX126X_RESET_STATS = 0x00,
// Miscellaneous
SX126X_GET_DEVICE_ERRORS = 0x17,
SX126X_CLR_DEVICE_ERRORS = 0x07,Поделиться122023-07-08 04:23:25
Регистры в даташите прописаны. С их адресами проблем нет. Сишные библиотеки на гитхабе ковырял. Не понятно как это должно выглядеть в плане общения по spi. К примеру SetStandby 0×80. Rc значение 0, Xosc 1. Слать ЛоРа один байт со значением 80 потом второй с нужным мне значением 1 или 0? Должны ли быть от неё ответы? В какие моменты? 
Поделиться132023-07-08 19:57:32
ну да, сначала регистр а потом вторым байтом данные. Ответа может и не быть.
Отредактировано Yuriy.pv (2023-07-08 19:58:15)
Поделиться142023-07-08 21:33:57
Вот здесь и здесь (оттуда же) были ?
Поделиться152023-07-09 09:25:05
Были, читали, смотрели. Здесь, на форуме, тоже находил код, правда на sx127x.Анализировал его. Он несколько отличается от sx126x, судя по даташитам. Идеи есть. Один добрый человек помог немного разобраться в сути общения с модулем. Правда он больше акцентировался и практиковался на sx127x, но ради меня изучил sx126x и дал немного примеров. Как будет свободное время, сяду за комп, попробую примеры связать воедино.
Yuriy.pv, спасибо за пояснение, видимо так оно и есть.
Отредактировано Nec (2023-07-09 09:29:19)
Поделиться162023-07-16 15:15:49
Связь с модулем наладил. Команды отрабатывает, регистры читает и пишет, ответы получаю. Попутно был затык с передачей переменных в несколько байт через Spiout переменная, n . Баском опять, зачем-то, отправляет сначала младший байт, потом старший. Хотя в настройках SPI указано MSB first. Тут, по старой памяти, swap выручил.
Теперь упёрся в отправку сообщений. После записи в буфер и команды "Set_TX" с таймаутом "0" в ответ приходит что-то типа "режим Stanby_XOSC - команда принята, но по каким-то причинам не может быть выполнена". Код 0х3 - 0х5. И далее на все последующие команды тот же ответ. До перезагрузки модуля....
Поделиться172023-07-25 20:39:31
ЛоРу победил. Связь налажена. Когда все понято и прочитано, кажется, что ничего сложного в этом и не было. По последним тестам, в условиях города, связь около 1 Км. Без прямой видимости. Передача 20 байт занимает 200-300 мс. Думаю, это расстояние не предел, т.к. настроек модуляции куча и есть куда "двигаться". Спасибо всем, кто откликнулся!
Поделиться182023-10-15 12:47:36
Жесть с чипом на прямую общаться
Но в целом тема действительно хорошая.
Надеюсь поддержу развитие когда будет практика с Lora Wan
Поделиться192023-10-15 17:52:07
С LoRa wan не заморачивался. Не было необходимости. Тупо, передатчик-приёмник. Чипы LoRa бывают разные и управлять ими нужно по-разному. Я выбрал дешманский на aliexpress. На сегодняшний день стоит 250р. Модуль на базе LLCC68. Как я понял, китайский аналог SX1268. Урезанный в функционале немного. Но, на сегодняшний день добился связи в городских условиях до 3км. Использую для телеметрии в летательных аппаратах. В воздухе ещё больше дистанция. Кажется, заявленные 5-6км будут. Видео, конечно, не передашь, но для небольших пакетов в несколько байт вполне годятся.
P.S. Это все о модуле e220-400m22s на 160мВт (22дБм, 433МГц).
На днях испробую на 868МГц 22дБм.
Есть и на 1Вт (30дБм) и даже больше) Но в рамки нашего законодательства даже первый не укладывается...
Отредактировано Nec (2023-10-15 17:58:55)




