I'm working with the ESP32-CAM for recognizing QR codes.
Hi all,I'm working with the ESP32-CAM for recognizing QR codes. Everything worked perfectly, and I was able to recognize QR codes until I used SoftSerial to transmit the SBUS signal. I can receive the SBUS signal via RX2, but in my project, I need to transmit it to the flight controller.
7 Replies
![attachment 0](https://cdn.answeroverflow.com/1243256574474977380/0Screenshot_from_2024-05-22_23-44-57.png)
Can anyone please help me solve this problem? I'm trying to send the SBUS signal via a GPIO pin, and I'm not sure if that's going to work.
![attachment 0](https://cdn.answeroverflow.com/1243256766582493284/0IMG_20240523_113407.jpg)
the issue appears to be caused by the use of Software Serial library,Use (UART) instead of Software Serial, Here's an example of the configuration on how you could use hardware UART for transmitting the SBUS signal
![attachment 0](https://cdn.answeroverflow.com/1243256827274203246/0image.png)
Am unable to access and see your code but from your question you can use the code below:
#include <HardwareSerial.h>
#include <Wire.h>
#include "esp_camera.h"
#include "QR_Code.h"
HardwareSerial MySerial(2); // Use Serial2 for SBUS
void setup() {
Serial.begin(115200);
MySerial.begin(100000, SERIAL_8E2, RX2, TX2); // Initialize SBUS with appropriate baud rate and pins
// Camera initialization code
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if (psramFound()) {
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
// Initialize the camera
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
// QR Code recognition setup
// ...
}
void loop() {
// QR Code recognition logic
// ...
// SBUS communication logic
if (MySerial.available()) {
// Read and transmit SBUS data
while (MySerial.available()) {
int incomingByte = MySerial.read();
// Process SBUS data
}
}
// Attach your code logic here
}
This only works if you use the hardware esp32 ports instead of the software
With both codes, I can only receive an SBUS signal via RX2 (pin 16). However, I need to send the same SBUS signal via TX, which is not available on the ESP32-CAM. That's why I created a softSerial. The problem is that when I use the camera, everything works perfectly except the camera itself, which gives the error (GPIO is already installed)