Мне нужно использовать SoftwareSerial для небольшой платы, которую я сделал с M5Stamp и платой LoRa. Я также планировал использовать Bluetooth, но это дает мне ошибку компиляции, если я пытаюсь использовать обе библиотеки. Не удалось найти много помощи в Интернете.
C:\Path...\AppData\Local\Temp\arduino-sketch-C3A1C31318E964BF44FA1E35A7FE7344\libraries\espsoftwareserial-main\SoftwareSerial.cpp.o: в функции std::function<void ()>::operator()() константа: c:\Path...\arduino15\packages\m5stack\tools\xtensa-esp32-elf-gcc\gcc8_4_0-esp-2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function. h:686:(.iram1.66[_ZNK8delegate6detail12DelegateImplIPvvEclEv]+0x24): опасное перемещение: l32r: буквальное размещение после использования: .literal._ZNK8delegate6detail12DelegateImplIPvvEclEv collect2.exe: ошибка: ld вернул 1 статус выхода
По сути, мне просто нужен SoftwareSerial на контактах 21, 22 пико M5Stamp (которые подключены к плате LoRa) для работы с библиотекой Bluetooth, чтобы я мог использовать свой телефон для последовательных данных с платой. Поэтому любая помощь в работе этих библиотек или другая рекомендация по библиотеке будут оценены по достоинству.
Я ничего не пробовал, кроме поиска ответов в Интернете и проверки других библиотек Bluetooth. Но я не смог найти другую библиотеку, которая могла бы отправлять последовательные данные.
Это мой первый вопрос здесь.
#include <BluetoothSerial.h>
#include <SoftwareSerial.h>
SoftwareSerial radio(21, 22); //rx, tx
BluetoothSerial SerialBT;
2 причины: из-за того, что плата m5stamp и плата lora подходят к макетной плате, контакты 21 и 22 находятся рядом с серийными контактами платы lora. Кроме того, распиновка для m5stamp показывает только 1 аппаратный серийный номер, который я использую для программирования платы, и он нужен отдельно. Но я также снова поискал в Google и обнаружил, что вы можете использовать любые контакты в качестве аппаратного серийного номера, и я могу использовать Serial2. И я только что попробовал, и он скомпилировался. Так что это здорово. Я никогда не видел это как вариант раньше. Я посмотрю, работает ли код, и закрою это. Спасибо за совет.
Удачи, люблю смотреть, как люди разбираются! Рад, что у тебя получилось.
Вот ответ, который я нашел в Интернете для m5stamp. В конце концов, никакой последовательной библиотеки не понадобилось:
для UART вы должны иметь возможность использовать любой доступный GPIO для RX и TX следующим образом:
Serial2.begin(115200, SERIAL_8N1, <RX>, <TX>);
для I2C вы должны иметь возможность использовать любой доступный GPIO для SDA и SCL следующим образом:
Wire.begin(<SDA>, <SCL>);
Ошибка сама по себе заключается в том, что Flash-памяти на все не хватает, и компилятор жалуется на это. Таким образом, удалив библиотеку SoftwareSerial, которая в любом случае была ненужной, вы, вероятно, получили достаточно места во флэш-памяти для своего кода.
Он выдает ту же ошибку, если я компилирую для m5stack core2 с 16 МБ флэш-памяти по сравнению с m5stamp pico с 4 МБ. Так что, если бы это было так, и если бы каждая библиотека отлично компилировалась для 4 МБ флэш-памяти, тогда они обе поместились бы в 8 МБ и не испытывали проблем при компиляции для 16 МБ. Кроме того, в Arduino IDE есть предупреждения о нехватке флэш-памяти, если это произойдет.
ESP32 имеет три аппаратных UART (последовательных порта), по какой причине вы используете
SoftwareSerial
вместоSerial1
илиSerial2
?