Рубрики
Проекты на STM32

Подключение модуля LoRa SX1278 к STM32 Blue Pill

В этой статье мы изучим взаимодействие модуля LoRa SX1278 Ra-02 с платой STM32 Blue Pill. Модуль Ra-02 использует микросхему SX1278 и работает на частоте 433 МГц. Используя скачкообразное изменение частоты, он обеспечивает сбалансированное качество передачи сигнала — охватывает диапазон 420–450 МГц. LoRa SX1278 работает с протоколом связи SPI, поэтому его можно использовать с любым микроконтроллером, поддерживающим протокол SPI. Модуль SX1278 можно легко подключить к чипу STM32F103 с помощью интерфейса SPI.

Статья состоит из двух примеров. В первом примере мы отправим простое сообщение «Hello World» от LoRa передатчика к LoRa приемнику. А во втором примере мы отправим данные датчика BME280 по беспроводной связи LoRa. Датчик барометрического давления BME280 предоставляет информацию о барометрическом давлении, температуре, влажности и приблизительной высоте.

Ранее на нашем сайте мы рассматривали подключение модуля LoRa SX1278 к следующим микроконтроллерам и платам:

Также можете прочитать про то, как работают технологии LoRa и LoRaWAN.

Необходимые компоненты

  1. Плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
  2. SX1278 433MHz LoRa Module (модуль LoRa на 433 МГц) – 2 шт. (купить на AliExpress).
  3. 433MHz LoRa antenna – 2 шт. (купить на AliExpress).
  4. Датчик BME280 (купить на AliExpress).
  5. Источник питания 5 В.
  6. Макетная плата.
  7. Соединительные провода.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Предупреждение: всегда используйте модули LoRa SX1278 вместе с антеннами на 433 МГц, иначе модули могут повредиться во время работы.

Модуль LoRa SX1278

Микросхема SX1278 Ra-02 производится компанией Semtech. Радиочастотный модуль SX1278 в основном используется для широкополосной связи на большие расстояния. Он может выдерживать минимальное потребление тока и имеет высокую чувствительность -148 дБм при выходной мощности +20 дБм. Можно достичь большого расстояния передачи почти в 5 км с высокой надежностью. Таким образом, SX1278 отлично подходит для приложений IoT для отправки данных датчиков в облако на большие расстояния.

Этот модуль использует микросхему SX1278 от компании SEMTECH и работает на частоте 433 МГц. Скачкообразное изменение частоты, которое обеспечивает вам сбалансированное качество передачи сигнала, охватывает диапазон 420-450 МГц. Эта возможность беспроводной связи дальнего действия упакована в небольшой (17 x 16 мм) корпус и поставляется без антенны.

Распиновка SX1278

Контакт 1: ANT – предназначен для подключения антенны.

Контакты 2, 9, 16: GND – заземляющие контакты общего заземления с источником питания и контроллерами.

Контакт 3: 3,3 В — для подачи питания на устройство.

Контакт 4: RESET (СБРОС) – предназначен для сброса модуля посредством внешнего сигнала.

Контакты 5, 6, 7, 8, 10, 11: DIO0, DIO1, DIO2, DIO3, DIO4, DIO5 – для выполнения общей функции ввода-вывода через модуль помогут контакты DIO. Их можно настроить как контакты прерываний.

Контакт 12: SCK – предназначен для тактовых импульсов во время связи по SPI.

Контакт 13: MISO – MISO означает Master in и Slave out, он передает данные от модуля к контроллеру. Master (ведущий) – это контроллер, а SX1278 – это Slave (ведомый).

Контакт 14: MOSI – MOSI означает «Master Out/Slave In». Таким образом, этот контакт будет получать данные от контроллера.

Контакт 15: NSS – это контакт выбора/включения микросхемы, который поможет активировать ведомое устройство.

Распределение частот LoRa

Частоты, на которых работают типовые модули LoRa, не везде являются законными. Например, в Индии нелицензируемый диапазон частот составляет от 865 МГц до 867 МГц. Там разрешено использовать только этот диапазон частот. SX1278 имеет частоту 433 МГц, поэтому его в Индии не разрешено использовать в течение длительного времени, за исключением академических целей. Аналогично, проверьте разрешенные диапазоны в вашей стране на предмет того какие частоты LoRa вы можете использовать. Модули LoRa доступны в различных диапазонах частот, наиболее распространенными из которых являются 433 МГц, 915 МГц и 868 МГц.

Взаимодействие LoRa SX1278 с STM32

Теперь давайте соединим модуль LoRa SX1278 с платой STM32F103C и сделаем передатчик/приемник LoRa на их основе. Соединения между SX1278 и STM32F103 выглядят следующим образом:

Схема, реализующая эти соединения, приведена на следующем рисунке. Вы можете собрать пару таких схем на макетной плате. Одна из схем будет работать как передатчик (отправитель), а другая как приемник.

Собранная на двух макетных платах конструкция проекта показана на следующем рисунке.

Библиотека LoRa для STM32

Библиотека Arduino LoRa не поддерживается платой STM32F103. Поэтому для платы STM32F103 для Arduino IDE существует модифицированная библиотека. Библиотека STM32 LoRa используется для отправки и получения данных с использованием радиомодулей LoRa.

Эта библиотека напрямую раскрывает возможности радио LoRa и позволяет отправлять данные на любые радиостанции в радиусе действия с теми же параметрами радиосвязи. Все данные передаются в эфир, и адресация не требуется. Загрузить: библиотека STM32 LoRa

Исходные коды передатчика и приемника

Код передатчика

Код приемника

Результат

Беспроводная отправка данных датчиков с использованием модуля LoRa

Давайте теперь рассмотрим второй пример. В этом примере мы будем подключать модуль SX1278 с датчиком BME280 к схеме передатчика. BME280 — это интегрированный датчик окружающей среды, разработанный специально для мобильных приложений, обладающий высокой линейностью и точностью для измерений давления, влажности и температуры. Проект метеостанции на основе данного датчика мы рассматривали в этой статье.

Датчик работает по протоколу I2C, поэтому его выводы I2C, т.е. SDA и SCL, подключены к контактам PB7 и PB6 платы STM32 соответственно. Мы будем отправлять показания датчика BME280 по беспроводной сети с передатчика STM32 LoRa на приемник STM32 LoRa.

Печатная плата для проекта

Если вы не хотите собирать схему на макетной плате и вам нужна печатная плата для проекта, то вот печатная плата для вас. Печатная плата для STM32 LoRa SX1278 Sender & Receiver разработана с использованием онлайн-инструмента проектирования схем и печатных плат EasyEDA. Изображение печатной платы передатчика приведено на следующем рисунке.

Аналогично ниже приведено изображение печатной платы приемника.

Файлы Gerber для этих печатных плат вы можете скачать по следующим ссылкам:

  1. Печатная плата передатчика
  2. Печатная плата приемника

Исходный код программ для варианта с датчиком BME280

Код передатчика и приемника на основе LoRa SX1278 и STM32 приведен ниже. Код передатчика требует библиотеку BME280. Загрузите библиотеку BME280 по этой ссылке: Библиотека BME280

Код передатчика

Код приемника

Результаты

11 ответов к “Подключение модуля LoRa SX1278 к STM32 Blue Pill”

Так, снова дополняю. Если вставить строки:
pinMode(SS, OUTPUT);
pinMode(RST, OUTPUT);
pinMode(DI0, OUTPUT);
pinMode(PA6, INPUT);
И закомментировать строки:
if (!LoRa.begin(BAND))
{
Serial.println(«Starting LoRa failed!»);
while (1);
}
то на логическом анализаторе я вижу данные что то типо 59 байт инициализации, а затем множество данных которые в шестнадцатеричном формате и их логический анализатор воспринимает как стандартный интерфейс SPI и даже SX1278 что то отвечает в линию. Но строка:
Starting LoRa failed!
Упёрто висит и никаких данных в радиоэфир не отдаётся.
Я ещё и больше скажу мониторинг порта останавливается на строках:
LoRa Sender
Starting LoRa failed!
Sending packet: 0
Sending packet: 1
И всё, висит и не изменятся… Как будто бесконечный цикл останавливается и всё.

Добрый день. Пытаюсь повторить Ваш проект, возникли проблемы. Как можно с Вами связаться, нужна Ваша консультация.

Я сам в Arduino не силён, но занимался раньше STM32 через Keil uVision. Сейчас нужно срочно выполнить одну работу, но столкнулся с проблемой которую решить не получается. Дело в том что blue pill не выдаёт ничего по SPI интерфейсу, я взял логический анализатор и подключил все 6 пинов к анализатору. Никаких телодвижений нет. Есть подозрения что порт попросту не сконфигурирован или интерфейс не тактируется.

Резюме наиболее вероятных причин в порядке убывания вероятности:
1. Не включено тактирование модуля SPI1 (__HAL_RCC_SPI1_CLK_ENABLE).
2. SPI сконфигурирован как SLAVE, а не MASTER.
3. Программа не доходит до вызова функции передачи из-за ошибок инициализации или зацикливания.
4. Отсутствует общий GND с логическим анализатором.
5. Аппаратная проблема с платой.

Начните с простого тестового кода, проверьте тактирование и настройку пинов — в 95% случаев проблема находится там.

Я вызвал функцию:
__HAL_RCC_SPI1_CLK_ENABLE();
Но эта функция не задекларирована. Она же должна быть в:
#include
Или есть отдельная функция именно для STM32?

Я вот до чего дошел. В последовательный порт микроконтроллер выдаёт отчёт:
Starting LoRa failed!
Становится понятно что проблема с модулем LoRa. Я попробовал закомментировать строки:
if (!LoRa.begin(BAND))
{
Serial.println(«Starting LoRa failed!»);
while (1);
}
Что в свою очередь отменяет проверку модуля LoRa, вместо этого я вставил задержку:
delay(1000);
И по последовательному интерфейсу побежали кадры. Исходя из того что я вижу на логическом анализаторе микроконтроллер выдаёт 24 слова (48 байта) с промежутками между ними примерно по 8 микросекунд и перед каждым словом на выводе тактирования (SCK) появляется логическая 1 длительностью в 5 микросекунд. Однако кроме сигнала SCK и MOSI на логическом анализаторе нет ничего… То есть нет сигнала SS, нет сигнала MISO, даже нет сигнала RESET. Хотя при выключенном состоянии микроконтроллера на всех выводах висит логический 0, что логично, но при включении на выводах SS, MISO, RESET появляется логическая 1 и не меняется на протяжении всей программы.
Я думаю что проблема именно в этом.

И вот ещё. Я же вставил строку:
SPI.setClockDivider(SPI_CLOCK_DIV16);
Но если её закомментировать то на линии MISO периодически появляется очень редкие пинки в тоже время когда MOSI говорит, но это какой-то хаотичный сигнал который никак не расшифровывается и с разными промежутками времени которые мне не как не понятны…

От админа: ну вот, я вижу как вы подробно изучили эти вопросы. Прогресс налицо

Добрый вечер. К сожалению вряд ли смогу ответить на сложный вопрос, не занимался давно этим. Попробуйте задать вопрос deepseek, он реально очень умен, неоднократно в этом уже убеждался

Так а как его найти? Я на этом сайте не вижу ни форума ни списка пользователей… Этот сайт создан русскими или нет?

Это китайский очень грамотный и бесплатный ИИ (не нужен ВПН), отлично работает с русским языком. Заходите на chat.deepseek.com/ и задавайте интересующие вас вопросы, если с первого раза не справится с ответом, можно задавать уточняющие вопросы, он все отлично понимает что это уточняющие вопросы к вашему первому вопросу

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *