Image 通过UART&;从ESP32-CAM向Arduino发送图片;劳拉
我想通过UART从ESP32-CAM向Arduino Uno发送一张照片,然后将我收到的照片从Uno发送到另一个带有LoRa的Uno。我计划使用的方法是从串行监视器中获取加密的图片代码。如果有更好的方法,我愿意接受新的 首先,问题是有效载荷的格式,它是如何加密的。在我的代码中,我从图片中得到了两种不同的输出,JPEG(我不确定)和十六进制(你会看到,这一种也很奇怪)。当我试图读取这些加密代码时,无法解码和打开图片 所以我想找到一个更好的方式发送。实际上我还没有决定我会用哪种方式。它也可以是Base64或十六进制 因此,我的问题是: 1-)从串行监视器拍摄照片是一种好方法吗?在我提到的事情之间,你更喜欢用哪种方式发送图片 2-)哪种编码方式最容易传输图片 3-)在我下面添加的代码中,我可以得到JPEG和HEX。当我用CoolTerm软件录制最后一部分时,我很高兴能看到图片。但如果我用UART发送给Uno,我就无法解码。这可能是因为通信问题。最安全、最简单的发送方式是什么 4-)在代码中,我不能使用十六进制输出。它有点不同于其他十六进制加密的图片。为什么以及如何使用它 这是我的密码:Image 通过UART&;从ESP32-CAM向Arduino发送图片;劳拉,image,arduino,uart,esp32,arduino-esp32,Image,Arduino,Uart,Esp32,Arduino Esp32,我想通过UART从ESP32-CAM向Arduino Uno发送一张照片,然后将我收到的照片从Uno发送到另一个带有LoRa的Uno。我计划使用的方法是从串行监视器中获取加密的图片代码。如果有更好的方法,我愿意接受新的 首先,问题是有效载荷的格式,它是如何加密的。在我的代码中,我从图片中得到了两种不同的输出,JPEG(我不确定)和十六进制(你会看到,这一种也很奇怪)。当我试图读取这些加密代码时,无法解码和打开图片 所以我想找到一个更好的方式发送。实际上我还没有决定我会用哪种方式。它也可以是Bas
#include "esp_camera.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "driver/rtc_io.h"
#include "img_converters.h" // https://github.com/espressif/esp32camera/blob/master/conversions/include/img_converters.h
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
size_t jpgCallBack(void * arg, size_t index, const void* data, size_t len)
{
uint8_t* basePtr = (uint8_t*) data;
for (size_t i = 0; i < len; i++) {
Serial.write(basePtr[i]);
}
return 0;
}
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
Serial.begin(115200);
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_GRAYSCALE;
if (psramFound()) {
config.frame_size = FRAMESIZE_QQVGA; // QQVGA|QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
config.fb_count = 2;
}
else {
Serial.println(F("PSRAM NOT FOUND"));
return;
}
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("CAMERA ERROR 0x%x", err);
return;
}
camera_fb_t * fb = NULL;
Serial.print("5 SEC TO PHOTO");
delay(5000);
fb = esp_camera_fb_get();
if (!fb) {
Serial.print("ERROR WHILE TAKING PHOTO");
return;
}
Serial.printf("\nWidht = %u, Height=%u\n", fb->width, fb->height);
for (size_t i = 0; i < fb->len; i++)
{
if (i % 16 == 0) Serial.printf("\n%06u\t", i);
if (fb->buf[i] < 0x10) Serial.write('0');
Serial.print(fb->buf[i], HEX);
}
Serial.print("\n\nSTART RECORDING\n\n");
delay(5000);
frame2jpg_cb(fb, 10, jpgCallBack, NULL); // https://github.com/espressif/esp32-camera/blob/b02992a5b88571bdad0660ee652a620aaabc994a/conversions/include/img_converters.h#L54
esp_camera_fb_return(fb);
}
void loop() {}
#包括“esp_camera.h”
#包括“soc/soc.h”
#包括“soc/rtc\u cntl\u reg.h”
#包括“驱动程序/rtc_io.h”
#包括“img\U转换器.h”//https://github.com/espressif/esp32camera/blob/master/conversions/include/img_converters.h
#定义PWDN\u GPIO\u NUM 32
#定义RESET\u GPIO\u NUM-1
#定义XCLK\u GPIO\u NUM 0
#定义SIOD_GPIO_NUM 26
#定义SIOC_GPIO_数量27
#定义Y9_GPIO_数量35
#定义Y8_GPIO_数量34
#定义Y7_GPIO_数量39
#定义Y6_GPIO_数量36
#定义Y5_GPIO_NUM 21
#定义Y4_GPIO_数量19
#定义Y3_GPIO_数量18
#定义Y2\u GPIO\u数量5
#定义VSYNC\u GPIO\u NUM 25
#定义HREF\u GPIO\u NUM 23
#定义PCLK\U GPIO\U编号22
大小jpgCallBack(无效*参数、大小索引、常量无效*数据、大小长度)
{
uint8_t*basePtr=(uint8_t*)数据;
对于(大小i=0;iwidth,fb->Height);
对于(大小i=0;ilen;i++)
{
如果(i%16==0)Serial.printf(“\n%06u\t”,i);
如果(fb->buf[i]<0x10)串行写入('0');
串行打印(fb->buf[i],十六进制);
}
Serial.print(“\n\n开始录制\n\n”);
延迟(5000);
frame2jpg_cb(fb,10,jpgCallBack,NULL);//https://github.com/espressif/esp32-camera/blob/b02992a5b88571bdad0660ee652a620aaabc994a/conversions/include/img_converters.h#L54
esp_摄像头_fb_返回(fb);
}
void loop(){}
这是我的串行监视器输出,两个都来自Arduino Uno。数据通过UART从ESP32-CAM获取
LoRa设计用于发送非常短的数据,以换取远距离和电池寿命的好处。它不是用于发送图像的应用程序。