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

vany5921 发表于 2019-12-23 11:15

M5StickV使用串口发送图像至M5Stack

通过定义GROVE引脚可以方便的将图像通过串口发送至M5Stack,按照JPEG的格式组装字节数组直接发送即可
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()
    uart_Port.write(data_packet)
    uart_Port.write(img_buf)
    time.sleep(1.0)   #这里的时间不可省略,省略M5Stack画面不流畅
    print("finish")

M5Stack使用PORTA接口接收,按照规则解析,每次10个字节
#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 = { 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;
      int rx_size = serial_ext.readBytes(rx_buffer, 10);
      if (rx_size == 10) {   //packet receive of packet_begin
            if ((rx_buffer == packet_begin) && (rx_buffer == packet_begin) && (rx_buffer == packet_begin)) {
      //image size receive of packet_begin
                jpeg_data.length = (uint32_t)(rx_buffer << 16) | (rx_buffer << 8) | rx_buffer;
                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
      }
    }
}
}

baiheren 发表于 2019-12-27 15:24

请问楼主,M5Stack和stickV 的连线是怎样的?我在M5stack   的port C 中引出四根线,直接连到stick
V的端口上吗?

baiheren 发表于 2019-12-27 15:34

baiheren 发表于 2019-12-27 15:24
请问楼主,M5Stack和stickV 的连线是怎样的?我在M5stack   的port C 中引出四根线,直接连到stick
V的端口 ...

能否请具体指点,谢谢:)或上个图?

vany5921 发表于 2019-12-27 16:02

baiheren 发表于 2019-12-27 15:34
能否请具体指点,谢谢或上个图?

grove线直接连上

baiheren 发表于 2019-12-30 09:01

vany5921 发表于 2019-12-27 16:02
grove线直接连上

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

vany5921 发表于 2019-12-30 15:11

本帖最后由 vany5921 于 2019-12-30 15:14 编辑

baiheren 发表于 2019-12-30 09:01
谢谢你的回复,我今天再次做实验,还是没有成功。能否请你再指点一下。   我先给stack和V分别下载你给 ...
我代码里写的是portA(22/21),不是portC,用蓝色口你要自己改一下端口号
页: [1]
查看完整版本: M5StickV使用串口发送图像至M5Stack