标签归档:折腾

编译其他模块到micropython

将其他模块下载到文件

以下命令编译一下 mpy-coress ,这是为了构建MicroPython交叉编译器,以便将一些内置脚本预编译为字节码,这只需要做一次:

make -C mpy-cross
$ make -C mpy-cross
#转到模块
$ cd ports/esp32

$ make BOARD=GENERIC_C3 clean # 可选项,如果需要完全重新编译则执行这行命令
$ make submodules
$ make BOARD=GENERIC_C3

ST7789

git clone https://github.com/micropython/micropython.git
git clone https://github.com/russhughes/st7789_mpy.git
cd micropython/
git submodule update --init
cd mpy-cross/
make
cd ..
cd ports/esp32
#若需要加入python模块,请将py文件复制到modules的文件夹下
cp ../../../st7789_mpy/fonts/bitmap/vga1_16x16.py modules
cp ../../../st7789_mpy/fonts/truetype/NotoSans_32.py modules
cp ../../../st7789_mpy/fonts/vector/scripts.py modules
#添加py模块 上面
make USER_C_MODULES=../../../../st7789_mpy/st7789/micropython.cmake FROZEN_MANIFEST="" FROZEN_MPY_DIR=$UPYDIR/modules

ULAB

git clone https://github.com/micropython/micropython.git
git clone https://github.com/v923z/micropython-ulab.git ulab
make BOARD=PYBV11 USER_C_MODULES=../../../ulab all

make就是编译命令

-j 立即多个编译命令同时执行,加快速度 -j4 (连在一起)

clean 清楚之前编译

BOARD=PYBV11 #设置编译后的文件及开发板子

USER_C_MODULES= #设置额外的C模块 .cmake文件
FROZEN_MANIFEST=”” #冻结文件
FROZEN_MPY_DIR=$UPYDIR/modules #python模块目录

ARDUINO NANO PICO RP2040 OPENMV

果然有坑,之前找的OPENMV官方固件,只打包了ARDUNIO的RP2040的OPENMV,pico版本的没有打包,不会打包的渣渣看了pico的配置,怎么都没法调试,再去试试看吧:

好在openmv的配置文件都是 omv_boardconfig.h 这个。

建议使用Ultimate PICO 16MB的FLASH RP2040

好吧和之前固件一样,只有QQVGA和RGB565,连jpg保存,二维码识别都没有,只有人脸和眼睛识别·。最多只能做一个RGB565 的QQVGA的串流模块,相关代码:

import sensor,image
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
eyes_cascade = image.HaarCascade("eye", stages=24)
face_cascade = image.HaarCascade("frontalface", stage = 25)

def face():
    img = sensor.snapshot()
    objects = img.find_features(face_cascade, threshold=0.5, scale_factor=1.25)
    print(objects)

def eye():
    img = sensor.snapshot()
     objects = img.find_features(eyes_cascade, threshold=0.5, scale=1.5)
     print(objects)

/*
 * This file is part of the OpenMV project.
 *
 * Copyright (c) 2013-2021 Ibrahim Abdelkader <iabdalkader@openmv.io>
 * Copyright (c) 2013-2021 Kwabena W. Agyeman <kwagyeman@openmv.io>
 *
 * This work is licensed under the MIT license, see the file LICENSE for details.
 *
 * Board configuration and pin definitions.
 */
#ifndef __OMV_BOARDCONFIG_H__
#define __OMV_BOARDCONFIG_H__

// Architecture info
#define OMV_ARCH_STR               "PICO M0" // 33 chars max
#define OMV_BOARD_TYPE             "PICO"

#ifndef LINKER_SCRIPT
extern unsigned char *OMV_UNIQUE_ID_ADDR;   // Unique address.
#endif
#define OMV_UNIQUE_ID_SIZE         2        // Unique ID size in words.
#define OMV_UNIQUE_ID_OFFSET       4        // Bytes offset for multi-word UIDs.


#define OMV_XCLK_MCO               (0U)
#define OMV_XCLK_TIM               (1U)

// Sensor external clock source.
#define OMV_XCLK_SOURCE            (OMV_XCLK_TIM)

// Sensor external clock timer frequency.
// TODO Not actually used right now, frequency is hardcoded.
#define OMV_XCLK_FREQUENCY         (12500000)

// Enable hardware JPEG
#define OMV_HARDWARE_JPEG          (0)

// Enable sensor drivers
#define OMV_ENABLE_OV2640          (0)
#define OMV_ENABLE_OV5640          (0)
#define OMV_ENABLE_OV7670          (1)
#define OMV_ENABLE_OV7690          (0)
#define OMV_ENABLE_OV7725          (0)
#define OMV_ENABLE_OV9650          (0)
#define OMV_ENABLE_MT9V0XX         (0)
#define OMV_ENABLE_LEPTON          (0)
#define OMV_ENABLE_HM01B0          (0)

// Set which OV767x sensor is used
#define OMV_OV7670_VERSION         (70)

// OV7670 clock divider
#define OMV_OV7670_CLKRC           (0x00)

// FIR Module
#define OMV_ENABLE_FIR_MLX90621    (0)
#define OMV_ENABLE_FIR_MLX90640    (0)
#define OMV_ENABLE_FIR_MLX90641    (0)
#define OMV_ENABLE_FIR_AMG8833     (1)
#define OMV_ENABLE_FIR_LEPTON      (0)

// Enable sensor features
#define OMV_ENABLE_OV5640_AF       (0)

// Enable WiFi debug
#define OMV_ENABLE_WIFIDBG         (0)
#define OMV_ENABLE_TUSBDBG         (1)
#define OMV_TUSBDBG_PACKET         (64)

// Enable self-tests on first boot
#define OMV_ENABLE_SELFTEST        (0)

// If buffer size is bigger than this threshold, the quality is reduced.
// This is only used for JPEG images sent to the IDE not normal compression.
#define JPEG_QUALITY_THRESH        (160 * 120)

// Low and high JPEG QS.
#define JPEG_QUALITY_LOW           35
#define JPEG_QUALITY_HIGH          60

// FB Heap Block Size
#define OMV_UMM_BLOCK_SIZE         16

// Core VBAT for selftests
#define OMV_CORE_VBAT              "3.3"

// USB IRQn.
#define OMV_USB_IRQN               (USBCTRL_IRQ_IRQn)
#define OMV_USB1_IRQ_HANDLER       (USBD_IRQHandler)

// Linker script constants (see the linker script template port/x.ld.S).
#define OMV_FB_MEMORY              RAM // Framebuffer, fb_alloc
#define OMV_MAIN_MEMORY            RAM // data, bss and heap memory
#define OMV_STACK_MEMORY           RAM // stack memory

#define OMV_FB_SIZE                (100K) // FB memory
#define OMV_FB_ALLOC_SIZE          (16K) // minimum fb alloc size
#define OMV_STACK_SIZE             (16K)
#define OMV_HEAP_SIZE              (60 * 1024) // MicroPython's heap
#define OMV_JPEG_BUF_SIZE          (20 * 1024) // IDE JPEG buffer (header + data).

// GP LED
#define LED_PIN                    (6)

// FIR I2C
#define FIR_I2C_ID                 (0)
#define FIR_I2C_SCL_PIN            (13)
#define FIR_I2C_SDA_PIN            (12)
#define FIR_I2C_SPEED              (OMV_I2C_SPEED_FULL)

// ISC I2C
#define ISC_I2C_ID                 (0)
#define ISC_I2C_SCL_PIN            (13)
#define ISC_I2C_SDA_PIN            (12)
#define ISC_I2C_SPEED              (OMV_I2C_SPEED_STANDARD)

// I2C0
#define I2C0_ID                    (0)
#define I2C0_SCL_PIN               (13)
#define I2C0_SDA_PIN               (12)
#define I2C0_SPEED                 (OMV_I2C_SPEED_FULL)

// I2C1 该处为摄像头SDA和SCL 建设设置
#define I2C1_ID                    (1)
#define I2C1_SCL_PIN               (27)
#define I2C1_SDA_PIN               (26)
#define I2C1_SPEED                 (OMV_I2C_SPEED_FULL)

// LCD config.
#define LCD_SPI                    (spi0)
#define LCD_CS_PIN                 (5)
#define LCD_MOSI_PIN               (7)
#define LCD_SCLK_PIN               (6)
#define LCD_RST_PIN                (4)
#define LCD_RS_PIN                 (0)

// AUDIO config.
#define PDM_PIO                    (pio1)
#define PDM_SM                     (0)
#define PDM_DMA                    (1)
#define PDM_DMA_IRQ                (DMA_IRQ_1)
#define PDM_DMA_CHANNEL            (0)

#define PDM_CLK_PIN                (23)
#define PDM_DIN_PIN                (22)


#此处和PICO不一样,但是好在都是OV7670摄像头
#下面为设置代码
// DCMI config.
#define DCMI_PIO                   (pio0)
#define DCMI_SM                    (0)
#define DCMI_DMA                   (0)
#define DCMI_DMA_IRQ               (DMA_IRQ_0)
#define DCMI_DMA_CHANNEL           (0)

#define DCMI_POWER_PIN             (0)
#define DCMI_RESET_PIN             (1)

#define DCMI_D0_PIN                (15)
#define DCMI_D1_PIN                (16)
#define DCMI_D2_PIN                (17)
#define DCMI_D3_PIN                (18)
#define DCMI_D4_PIN                (19)
#define DCMI_D5_PIN                (20)
#define DCMI_D6_PIN                (21)
#define DCMI_D7_PIN                (25) // MSB is read separately.

#define DCMI_XCLK_PIN              (28)

// Must match the pins defined in dcmi.pio.
#define DCMI_PXCLK_PIN             (29)
#define DCMI_HSYNC_PIN             (27)
#define DCMI_VSYNC_PIN             (26)

#endif //__OMV_BOARDCONFIG_H__

PICO OPENMV引脚设置

/*
 * This file is part of the OpenMV project.
 *
 * Copyright (c) 2013-2021 Ibrahim Abdelkader <iabdalkader@openmv.io>
 * Copyright (c) 2013-2021 Kwabena W. Agyeman <kwagyeman@openmv.io>
 *
 * This work is licensed under the MIT license, see the file LICENSE for details.
 *
 * Board configuration and pin definitions.
 */
#ifndef __OMV_BOARDCONFIG_H__
#define __OMV_BOARDCONFIG_H__

// Architecture info
#define OMV_ARCH_STR               "PICO M0" // 33 chars max
#define OMV_BOARD_TYPE             "PICO"

#ifndef LINKER_SCRIPT
extern unsigned char *OMV_UNIQUE_ID_ADDR;   // Unique ID address.
#endif
#define OMV_UNIQUE_ID_SIZE         2        // Unique ID size in words.
#define OMV_UNIQUE_ID_OFFSET       4        // Bytes offset for multi-word UIDs.

#define OMV_XCLK_MCO               (0U)
#define OMV_XCLK_TIM               (1U)

// Sensor external clock source.
#define OMV_XCLK_SOURCE            (OMV_XCLK_TIM)

// Sensor external clock timer frequency.
// TODO Not actually used right now, frequency is hardcoded.
#define OMV_XCLK_FREQUENCY         (12500000)

// Enable hardware JPEG
#define OMV_HARDWARE_JPEG          (0)

// Enable sensor drivers
#define OMV_ENABLE_OV2640          (0)
#define OMV_ENABLE_OV5640          (0)
#define OMV_ENABLE_OV7670          (1)
#define OMV_ENABLE_OV7690          (0)
#define OMV_ENABLE_OV7725          (0)
#define OMV_ENABLE_OV9650          (0)
#define OMV_ENABLE_MT9V0XX         (0)
#define OMV_ENABLE_LEPTON          (0)
#define OMV_ENABLE_HM01B0          (0)

// Set which OV767x sensor is used
#define OMV_OV7670_VERSION         (70)

// OV7670 clock divider
#define OMV_OV7670_CLKRC           (0x00)

// FIR Module
#define OMV_ENABLE_FIR_MLX90621    (0)
#define OMV_ENABLE_FIR_MLX90640    (0)
#define OMV_ENABLE_FIR_MLX90641    (0)
#define OMV_ENABLE_FIR_AMG8833     (1)
#define OMV_ENABLE_FIR_LEPTON      (0)

// Enable sensor features
#define OMV_ENABLE_OV5640_AF       (0)

// Enable WiFi debug
#define OMV_ENABLE_WIFIDBG         (0)

// Enable self-tests on first boot
#define OMV_ENABLE_SELFTEST        (0)

// If buffer size is bigger than this threshold, the quality is reduced.
// This is only used for JPEG images sent to the IDE not normal compression.
#define JPEG_QUALITY_THRESH        (160 * 120)

// Low and high JPEG QS.
#define JPEG_QUALITY_LOW           35
#define JPEG_QUALITY_HIGH          60

// FB Heap Block Size
#define OMV_UMM_BLOCK_SIZE         16

// Core VBAT for selftests
#define OMV_CORE_VBAT              "3.3"

// USB IRQn.
#define OMV_USB_IRQN               (USBCTRL_IRQ_IRQn)
#define OMV_USB1_IRQ_HANDLER       (USBD_IRQHandler)

// Linker script constants (see the linker script template port/x.ld.S).
#define OMV_FB_MEMORY              RAM // Framebuffer, fb_alloc
#define OMV_MAIN_MEMORY            RAM // data, bss and heap memory
#define OMV_STACK_MEMORY           RAM // stack memory

#define OMV_FB_SIZE                (151K)   // FB memory: header + QVGA/GS image
#define OMV_FB_ALLOC_SIZE          (12K)    // minimum fb alloc size
#define OMV_STACK_SIZE             (8K)
#define OMV_HEAP_SIZE              (32 * 1024) // MicroPython's heap
#define OMV_JPEG_BUF_SIZE          (20 * 1024) // IDE JPEG buffer (header + data).

// GP LED
#define LED_PIN                    (25)

// FIR I2C
#define FIR_I2C_ID                 (0)
#define FIR_I2C_SCL_PIN            (21)
#define FIR_I2C_SDA_PIN            (20)
#define FIR_I2C_SPEED              (OMV_I2C_SPEED_FULL)

// ISC I2C
#define ISC_I2C_ID                 (1)
#define ISC_I2C_SCL_PIN            (15)
#define ISC_I2C_SDA_PIN            (14)
#define ISC_I2C_SPEED              (OMV_I2C_SPEED_STANDARD)

// I2C0
#define I2C0_ID                    (0)
#define I2C0_SCL_PIN               (21)
#define I2C0_SDA_PIN               (20)
#define I2C0_SPEED                 (OMV_I2C_SPEED_FULL)

// I2C1
#define I2C1_ID                    (1)
#define I2C1_SCL_PIN               (15)
#define I2C1_SDA_PIN               (14)
#define I2C1_SPEED                 (OMV_I2C_SPEED_FULL)

#define LCD_SPI                    (spi0)
#define LCD_CS_PIN                 (17)
#define LCD_MOSI_PIN               (19)
#define LCD_SCLK_PIN               (18)
#define LCD_RST_PIN                (20)
#define LCD_RS_PIN                 (21)

// DCMI config.
#define DCMI_PIO                   (pio0)
#define DCMI_SM                    (0)
#define DCMI_DMA                   (0)
#define DCMI_DMA_IRQ               (DMA_IRQ_0)
#define DCMI_DMA_CHANNEL           (0)

#define DCMI_POWER_PIN             (0)
#define DCMI_RESET_PIN             (1)

#define DCMI_D0_PIN                (2)
#define DCMI_D1_PIN                (3)
#define DCMI_D2_PIN                (4)
#define DCMI_D3_PIN                (5)
#define DCMI_D4_PIN                (6)
#define DCMI_D5_PIN                (7)
#define DCMI_D6_PIN                (8)
#define DCMI_D7_PIN                (9)

#define DCMI_XCLK_PIN              (10)

// Must match the pins defined in dcmi.pio.
#define DCMI_PXCLK_PIN             (11)
#define DCMI_HSYNC_PIN             (12)
#define DCMI_VSYNC_PIN             (13)

#endif //__OMV_BOARDCONFIG_H__

和之前大佬分享的那个接线图。

大佬的代码说明

股票接口API TAG

股票接口简单

http://qt.gtimg.cn/q=s_sz000858

v_s_sz000858=”51~五 粮 液~000858~160.00~4.00~2.56~469346~762290~~6210.57~GP-A”;

股票接口 详细

{代表交易所,200-美股(us),100-港股(hk),51-深圳(sz),1-上海(sh)}

http://qt.gtimg.cn/q=sz000858

0: 未知
1: 名字
2: 代码 **
3: 当前价格 **
4: 昨收
5: 今开
6: 成交量(手)**
7: 外盘
8: 内盘
9: 买一
10: 买一量(手)
11-18: 买二 买五
19: 卖一
20: 卖一量
21-28: 卖二 卖五
29: 最近逐笔成交
30: 时间
31: 涨跌
32: 涨跌%
33: 最高
34: 最低
35: 价格/成交量(手)/成交额
36: 成交量(手)***
37: 成交额(万)
38: 换手率。 ***
39: 市盈率
40:
41: 最高
42: 最低
43: 振幅
44: 流通市值
45: 总市值
46: 市净率
47: 涨停价
48: 跌停价

v_sz000858=”51~五 粮 液~000858~180.82~184.65~183.97~111477~51152~60325~180.82~13~180.81~39~180.80~32~180.79~6~180.78~22~180.86~3~180.87~1~180.88~2~180.90~4~180.93~620230411110518~-3.83~-2.07~184.15~180.60~180.82/111477/2032674213~111477~203267~0.29~26.95184.15~180.60~1.92~7018.43~7018.72~6.54~203.12~166.19~1.58~96~182.34~26.33~30.02~1.37~203267.4213~0.0000~0~ ~GP-A~0.07~-7.36~1.67~24.26~20.27~219.89~132.33~-5.04~-8.95~-7.69~3881445240~3881608005~75.00~-4.90~3881445240~20.04~0.04~~CNY”;

d
ee=d.split(“\””)
data=ee[1].split(“~”)
cn_name=date[1]#以空格分割
code=data[2]
n_price=data[3]
y_price=data[4]
n_s_price=data[5]
cj=data[6] #成交量
n_time=data[30]
cd=data[31]
cd_p=data[32]
price_h=data[33]
price_l=data[34]
huan_p=data[38]
price_sh=data[47]
price_sl=data[48]

获取全部股票代码

股票接口

http://qt.gtimg.cn/q=sz000858


0: 未知
1: 名字 
2: 代码 **
3: 当前价格 **
4: 昨收
5: 今开
6: 成交量(手)**
7: 外盘
8: 内盘 
9: 买一 
10: 买一量(手)
11-18: 买二 买五 
19: 卖一 
20: 卖一量
21-28: 卖二 卖五 
29: 最近逐笔成交 
30: 时间 
31: 涨跌
32: 涨跌% 
33: 最高 
34: 最低 
35: 价格/成交量(手)/成交额 
36: 成交量(手)***
37: 成交额(万)
38: 换手率。 ***
39: 市盈率 
40:
41: 最高
42: 最低 
43: 振幅 
44: 流通市值
45: 总市值 
46: 市净率 
47: 涨停价
48: 跌停价

v_sz000858="51~五 粮 液~000858~180.82~184.65~183.97~111477~51152~60325~180.82~13~180.81~39~180.80~32~180.79~6~180.78~22~180.86~3~180.87~1~180.88~2~180.90~4~180.93~6~~20230411110518~-3.83~-2.07~184.15~180.60~180.82/111477/2032674213~111477~203267~0.29~26.95~~184.15~180.60~1.92~7018.43~7018.72~6.54~203.12~166.19~1.58~96~182.34~26.33~30.02~~~1.37~203267.4213~0.0000~0~ ~GP-A~0.07~-7.36~1.67~24.26~20.27~219.89~132.33~-5.04~-8.95~-7.69~3881445240~3881608005~75.00~-4.90~3881445240~~~20.04~0.04~~CNY";


d
ee=d.split("\"")
data=ee[1].split("~")
cn_name=date[1]#以空格分割
code=data[2]
n_price=data[3]
y_price=data[4]
n_s_price=data[5]
cj=data[6] #成交量
n_time=data[30]
cd=data[31]
cd_p=data[32]
price_h=data[33]
price_l=data[34]
huan_p=data[38]
price_sh=data[47]
price_sl=data[48]

获取全部股票代码
#股票信息 micropython可用
import requests

def gp(code,style="sz"):
    url="http://qt.gtimg.cn/q="+style+str(code)
    print(url)
    f=requests.get(url)
    data_raw=str(f.content)
    data=data_raw.split("~")
    bak={}
    bak["name"]=data[1]
    bak["code"]=data[2]
    bak["price"]=data[3]
    bak["yestday"]=data[4]
    bak["rate"]=data[38]
    bak["precent"]=data[31]
    bak["todayMax"]=data[33]
    bak["todayMini"]=data[34]
    return bak


m=gp("601728","sh")
print(m)

milk-v duo使用ST7789和键盘登入 (240×240)

大佬已经实现,我标记一下 等待建设:

固件使用官方固件构建,但是大佬自己已经打包。

Workflow runs · milkv-duo/duo-buildroot-sdk (github.com)

相关打包的信息:

github.com/milkv-duo/duo-buildroot-sdk/compare/develop…markbirss:duo-buildroot-sdk:develop.patch

ST7789 为240×240

引脚:

-	PINMUX_CONFIG(SD1_CLK, SPI2_SCK);
-	PINMUX_CONFIG(SD1_CMD, SPI2_SDO);
-	PINMUX_CONFIG(SD1_D0, SPI2_SDI);
-	PINMUX_CONFIG(SD1_D3, SPI2_CS_X);
+	//PINMUX_CONFIG(SD1_CLK, SPI2_SCK);
+	//PINMUX_CONFIG(SD1_CMD, SPI2_SDO);
+	//PINMUX_CONFIG(SD1_D0, SPI2_SDI);
+	//PINMUX_CONFIG(SD1_D3, SPI2_CS_X);
+	pinmux_config(PINMUX_SPI2);
+	PINMUX_CONFIG(SPINOR_MISO, XGPIOA_23);	//RES
+	PINMUX_CONFIG(SPINOR_CS_X, XGPIOA_24);  //DC
+	PINMUX_CONFIG(SD0_PWR_EN, XGPIOA_14);	//BL used ? 应该为ST7789的使用引脚