M5StickV使用串口发送图像至M5Stack-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3312|回复: 5

M5StickV使用串口发送图像至M5Stack

[复制链接]
发表于 2019-12-23 11:15 | 显示全部楼层 |阅读模式
通过定义GROVE引脚可以方便的将图像通过串口发送至M5Stack,按照JPEG的格式组装字节数组直接发送即可
[mw_shl_code=python,true]import network, socket, time, sensor, image,lcd
from Maix import GPIO
from fpioa_manager import fm, board_info
from machine import UART

#M5StickV Camera Start
clock = time.clock()
lcd.init()
lcd.rotation(2)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
#sensor.set_vflip(1)
sensor.run(1)

sensor.skip_frames(time = 2000)
#M5StickV GPIO_UART
fm.register(34, fm.fpioa.UART2_TX, force=True)
fm.register(35, fm.fpioa.UART2_RX, force=True)
uart_Port = UART(UART.UART2, 115200,8,0,0, timeout=1000, read_buf_len= 4096)
while True:
    clock.tick()
    img = sensor.snapshot()
    lcd.display(img)
    img_buf = img.compress(quality=70)
    img_size1 = (img.size()& 0xFF0000)>>16
    img_size2 = (img.size()& 0x00FF00)>>8
    img_size3 = (img.size()& 0x0000FF)>>0
    data_packet = bytearray([0xFF,0xD8,0xEA,0x01,img_size1,img_size2,img_size3,0x00,0x00,0x00])
    uart_Port.write(data_packet)
    uart_Port.write(img_buf)
    time.sleep(1.0)   #这里的时间不可省略,省略M5Stack画面不流畅
    print("finish")[/mw_shl_code]

M5Stack使用PORTA接口接收,按照规则解析,每次10个字节
[mw_shl_code=arduino,true]#include <M5Stack.h>

HardwareSerial serial_ext(2);

typedef struct {
  uint32_t length;
  uint8_t *buf;
} jpeg_data_t;

jpeg_data_t jpeg_data;
static const int RX_BUF_SIZE = 20000;
static const uint8_t packet_begin[3] = { 0xFF, 0xD8, 0xEA };

void setup()
{
    M5.begin();
    jpeg_data.buf = (uint8_t *) malloc(sizeof(uint8_t) * RX_BUF_SIZE);
    jpeg_data.length = 0;
    if (jpeg_data.buf == NULL) {
        Serial.println("malloc jpeg buffer 1 error");
    }
    serial_ext.begin(115200, SERIAL_8N1, 22, 21);
}

void loop()
{
     M5.update();

    if (serial_ext.available()) {
        uint8_t rx_buffer[10];
        int rx_size = serial_ext.readBytes(rx_buffer, 10);
        if (rx_size == 10) {   //packet receive of packet_begin
            if ((rx_buffer[0] == packet_begin[0]) && (rx_buffer[1] == packet_begin[1]) && (rx_buffer[2] == packet_begin[2])) {
        //image size receive of packet_begin
                jpeg_data.length = (uint32_t)(rx_buffer[4] << 16) | (rx_buffer[5] << 8) | rx_buffer[6];
                int rx_size = serial_ext.readBytes(jpeg_data.buf, jpeg_data.length);
        //image processing,
                M5.Lcd.drawJpg(jpeg_data.buf, rx_size);
        //image processing end
      }
    }
  }
}[/mw_shl_code]
发表于 2019-12-27 15:24 | 显示全部楼层
请问楼主,M5Stack和stickV 的连线是怎样的?我在M5stack   的port C 中引出四根线,直接连到stick
V的端口上吗?
发表于 2019-12-27 15:34 | 显示全部楼层
baiheren 发表于 2019-12-27 15:24
请问楼主,M5Stack和stickV 的连线是怎样的?我在M5stack   的port C 中引出四根线,直接连到stick
V的端口 ...

能否请具体指点,谢谢或上个图?
 楼主| 发表于 2019-12-27 16:02 | 显示全部楼层
baiheren 发表于 2019-12-27 15:34
能否请具体指点,谢谢或上个图?

grove线直接连上
发表于 2019-12-30 09:01 | 显示全部楼层

谢谢你的回复,我今天再次做实验,还是没有成功。能否请你再指点一下。   我先给stack和V分别下载你给的程序。其中arduino的提示如图。另外硬件连线,发现只有5v给到V,stack上不能用usb供电,这种情况下,V才可以采集到画面,但是传不过来。stack上面显示的一片灰白。不知道为什么?

arduino文件下载信息

arduino文件下载信息

5v电给到V,stack上没有接5v

5v电给到V,stack上没有接5v

V和stack的GPIO连接

V和stack的GPIO连接
 楼主| 发表于 2019-12-30 15:11 | 显示全部楼层
本帖最后由 vany5921 于 2019-12-30 15:14 编辑
baiheren 发表于 2019-12-30 09:01
谢谢你的回复,我今天再次做实验,还是没有成功。能否请你再指点一下。   我先给stack和V分别下载你给 ...

我代码里写的是portA(22/21),不是portC,用蓝色口你要自己改一下端口号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:47 , Processed in 0.118344 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表