esp32上传图片至巴法云-http-esp32-arduino

开发背景

目前在做的一个项目需要检测人特征,并在成功检测后实现图片上云等操作,通信硬件选择了esp32,几经折腾,最后发现了巴法云,通过http传输图片十分方便。
因为有其他硬件来做图像采集与机器学习的部分,所以没有用esp32_cam,也就没有直接使用巴法云的例程

上传过程

整体的上传过程,包括修改私钥、订阅话题等上面的官方教程写得十分清楚,这里写的是已有图片元数据后如何上传。

上传图片的格式
使用esp_camera的库后直接拍照,将结果返回给camera_fb_t类型的一个对象,例程直接post发送了该对象的buf与len属性,分别对应图片数据与长度,但没找到这个过程用的是什么格式,官方文档给了的描述。
在这里插入图片描述

二进制格式有些迷惑,试过了纯二进制与ascii表示的假二进制,经过测试,上传bmp格式的图片也能成功,下面jpg格式能正常上传并显示,其他格式还没有测试,但要保证上传的数据不能超过大约35KB,否则显示不出来。

//这是图片的”二进制“数据,它是jpg格式的。这里只列举了几行
unsigned char dataJ[4209] = {
  0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x10, 0x0B, 0x0C, 0x0E, 0x0C, 0x0A, 0x10, 0x0E, 0x0D, 
  0x0E, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28, 0x1A, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25, 0x1D, 
  0x28, 0x3A, 0x33, 0x3D, 0x3C, 0x39, 0x33, 0x38, 0x37, 0x40, 0x48, 0x5C, 0x4E, 0x40, 0x44, 0x57, ………………

部分代码

//fb指针指向图片首地址
unsigned char *fb=dataJ;

HTTPClient http;
//设置请求url
http.begin("http://images.bemfa.com/upload/v1/upimages.php");
http.addHeader("Content-Type", "image/jpg"); //设置传输类型为图片
http.addHeader("Authorization", uid); //第二个参数写自己的私钥
http.addHeader("Authtopic", "pic");  //第二个参数是巴法云里设置的主题名称

//POST发送,直接填入图片的首地址指针,必须是unsigned char类型,第二个参数是数据长度
int httpResponseCode = http.POST(fb, 4209);

if(httpResponseCode==200){
    String response = http.getString();  
    Serial.println(response);           
}
else{
    Serial.print("Error on sending POST: ");
    Serial.println(httpResponseCode);
}
   
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
  
//回收下次再用
http.end();

效果

可以直接看到图片了就,因为是直接定死的数组,所以全都相同,下一步就是串口收动态数据再发送了
请添加图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值