美文网首页
esp32-cam arduino编程通过mqtt方式定时上报图

esp32-cam arduino编程通过mqtt方式定时上报图

作者: 大道至简非简 | 来源:发表于2019-04-06 09:21 被阅读0次

    感谢提供清晰的思路,3月15日发布的内容,非常好。


    image.png

    1、主要思路

    esp32-cam定时抓图生成16进制字符串,通过esp32 走mqtt通道上报给emq(参见前文),python订阅mqtt主题把16进制转成所需图片保存;

    2、定时抓图代码

    初始化相机,设定jpg格式,精度和大小可自行调整;

    void setupCamera() {
      const camera_config_t config = {
        .pin_pwdn     = kCameraPin_PWDN,
        .pin_reset    = kCameraPin_RESET,
        .pin_xclk     = kCameraPin_XCLK,
        .pin_sscb_sda = kCameraPin_SIOD,
        .pin_sscb_scl = kCameraPin_SIOC,
        .pin_d7       = kCameraPin_Y9,
        .pin_d6       = kCameraPin_Y8,
        .pin_d5       = kCameraPin_Y7,
        .pin_d4       = kCameraPin_Y6,
        .pin_d3       = kCameraPin_Y5,
        .pin_d2       = kCameraPin_Y4,
        .pin_d1       = kCameraPin_Y3,
        .pin_d0       = kCameraPin_Y2,
        .pin_vsync    = kCameraPin_VSYNC,
        .pin_href     = kCameraPin_HREF,
        .pin_pclk     = kCameraPin_PCLK,
        .xclk_freq_hz = 20000000,
        .ledc_timer   = LEDC_TIMER_0,
        .ledc_channel = LEDC_CHANNEL_0,
        .pixel_format = PIXFORMAT_JPEG,
        .frame_size   = FRAMESIZE_SVGA,
        .jpeg_quality = 10,
        .fb_count     = 1,
      };
    
      esp_err_t err = esp_camera_init(&config);
      Serial.printf("esp_camera_init: 0x%x\n", err);
    
      // sensor_t *s = esp_camera_sensor_get();
      // s->set_framesize(s, FRAMESIZE_QVGA);
    }
    

    定时抓图,fb->buf就是16进制图片数据;
    时间设定20秒,可自行调整间隔时间长短;

    void loop() {
    
    //  抓拍图片
      camera_fb_t *fb = esp_camera_fb_get();
      
      delay(20000);  // [ms]
    }
    

    3、通过wifi方式上报mqtt

    增加arduino mqtt库;
    https://github.com/knolleary/pubsubclient

    image.png
    初始化mqtt,配置emq的ip地址和端口
    void setupMqtt() {
      g_pub_sub_client.setServer(kMqttServerAddress, kMqttServerPort);
    }
    

    抓拍上报代码,上报主题为test;

    void loop() {
     handleMqtt();
    //  抓拍图片
      camera_fb_t *fb = esp_camera_fb_get();
      
      if ( fb ) {
        Serial.printf("width: %d, height: %d, buf: 0x%x, len: %d\n", fb->width, fb->height, fb->buf, fb->len);
        g_pub_sub_client.publish("test", fb->buf, fb->len);
         esp_camera_fb_return(fb);
      }
    
      delay(20000);  // [ms]
    }
    

    5、测试接收数据

    image.png

    正常接收esp32-cam上报的数据;

    6、python 16进制字符转jpg

    手工试一下是否可行;复制从emq接受的数据,粘贴到data即可;

    import binascii
    data="FFD8FFE000104A46494600010101000000000000FFDB0043000A07080908060A0908090B0B0A0C0F19100F0E0E0F1F161712192420262624202322282D3A31282B362B2223324433363B3D4041402730474C463F4B3A3F403EFFDB0043010B0B0B0F0D0F1D10101D3E2923293E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3EFFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA29A0558C3140A00754A8A68623A0B4E228573F5AD78A4315C8940AC645A343FB4B03941F9D2AEA01FA2
    
    ......(数据太长省略)
    
    FEB59DCAB1FFFD9"
    data=data.strip()
    data=data.replace(' ', '')
    data=data.replace('\n', '')
    data = binascii.a2b_hex(data)
    with open('image.jpg', 'wb') as image_file:
        image_file.write(data)
    

    查看图片


    image.png

    可以自行加入python订阅相关的mqtt主题,然后根据子项的id,日期保存图片。
    类似/test/1358852,1358852+日期为图片名字。
    完整后端思路。

    全文完;

    相关文章

      网友评论

          本文标题:esp32-cam arduino编程通过mqtt方式定时上报图

          本文链接:https://www.haomeiwen.com/subject/mpbliqtx.html