庐山派K230学习日记1 从点灯到吃灰

1 简介

庐山派以K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可作为AI与边缘计算平台

图 0

K230简介

K230芯片集成了两颗RISC-V处理器核心,双核玄铁C908,12nm 制程工艺,主频高达1.6GHz,是全球首款支持RISC-V Vector 1.0标准的商用SOC,配备第三代KPU处理单元,专为图像、视频、音频处理和AI加速设计,提供强劲的本地AI推理能力。支持三路MIPI CSI视频输入,最大分辨率可达4K。K230支持常见的AI计算框架如TensorFlow和PyTorch。下面是该处理器的框架图:

图 2

2 开发前准备

序号名称数量
1️⃣立创·庐山派-K230-CanMV开发板 主板1片
2️⃣GC2093||OV5647 摄像头(22P 0.5mm间距)1块
3️⃣TF卡(2G以上 class10等级以上)1片
4️⃣Type-C数据线(用来连接电脑)1条
5️⃣TF 卡读卡器(把固件烧录进TF卡)1个

安装CanMV IDE K230下载链接,写本文时最新版本为4.0.7,大家下载时下载最新的就可以了,单击下图中的CanMV IDE K230 for windows就可以把安装包下载到本地进行安装了。

图 3

打开后按照提示进行安装就可以了,注意安装到你知道的目录,建议不要安装到C盘。

图 4

安装成功之后可以在win11系统左下角的搜索栏中点击搜索找到CanMV IDE K230,我电脑这里的CanMV IDE是给K210使用的,如果大家也用过k210的话在打开IDE的时候需要注意,只有后面带K230标识的才支持我们的立创·庐山派-K230-CanMV开发板。如果搜索不到大家也可以直接去自己的安装目录的bin目录下的canmvide.exe文件。

图 5

3 获取及烧录固件

3.1 获取固件

固件获取链接

1️⃣ 【从嘉楠开发者社区获取最新固件】 (推荐)

点击这个链接,在资料下载栏目->K230->Images->CanMV->Micropython->CanMV-K230_LCKFB_micropython_v1.2-0-g9e4d9ca_nncase_v2.9.0.img.gz

2️⃣ 【从Github仓库获取最新固件】

点击这个[链接](Releases · kendryte/canmv_k230),下载最新固件注意需要下载里面带LCKFB字符的固件。

3️⃣ 【从我们的资料包中获取】

在我们的离线资料里面的 【1】固件 目录里面寻找。

需要注意,不管是从Github下载下来的还是从我们资料包中获取的都是压缩包,解压出来的才是固件镜像。

⚠️警告:

.gz后缀结尾的是压缩包,.img后缀结尾的才是固件。只能往 TF卡 中只能烧录 .img文件 格式的固件,如果直接烧录 .gz文件 可能会造成开发板损坏。

如下图中的,1是固件镜像,2是压缩包,1是2解压得出来的文件。

图 6

3.2 烧录固件

下载烧录工具Rufus,下载地址:Index of /downloads,如果网络不通畅的话也可以从我们的离线资料里面的 【0】工具/【2】烧录工具/【1】Rufus 目录中获取,这个软件是免安装的,下载下来后直接双击打开就可以了。我这里用的是4.5版本,界面如下:

图 7

此时把你的TF卡插入读卡器,然后把读卡器插入电脑,我这里使用的是4G的TF卡,插入后Rufus软件界面的设备列表栏会显示一个设备,并且左下角也会提示可以检测到设备,此时就可以点击镜像文件(请选择)后方的选择按钮来选择我们要烧录的镜像了,就选择我们在上一小节中获取到的 CanMV-K230_LCKFB_micropython_v1.1-0-g5a6fc54_nncase_v2.9.0.img 文件就可以了,选择后如下图所示:

图 8

正确选择固件镜像文件后我们直接点击右下角的开始按钮,继续操作会造成TF内所有内容全部消失,需要确保你这个TF卡内部没有重要数据,然后等待烧录完成就可以了。当Rufus软件的状态那一栏走完进度条,提示准备就绪时就表示成功烧录固件了,如下图所示:

图 9

此时我们就可以按以下步骤操作:

步骤:

  1. 关闭Rufus软件。
  2. 在电脑上软件弹出我们的读卡器 。
  3. 拔出读卡器。
  4. 从读卡器上拔出我们烧录号固件镜像的TF卡。
  5. 在 立创·庐山派-K230-CanMV开发板 未供电状态插入TF卡。

4 立创·庐山派 启动

完成以上操作后,我们就可以给开发板上电了。用Type-C数据线将开发板连入电脑。

如果正常启动,板子上的红色指示灯(红灯)就会自动点亮,稍微等待一会后(十秒内)。我们就可以在设备管理器中看到一个 新的USB串行设备(COMx),同时我们电脑的也会出现一个CanMV设备,可以当做U盘来访问开发板内的文件。

图 10

⚠️注意:

在第一次上电时,庐山派开发板会自动将TF卡除固件镜像外的剩余空间格式化为fat,并挂载在/data文件夹,格式化会占用一些时间并且会主动进行一次重启。后续上电时不会再进行这个操作,所以第一次上电会稍微慢一点。

当然,如果你已经安装了CanMV IDE K230,打开IDE,当 立创·庐山派-K230-CanMV开发板 正常启动后,左下角的连接图标的右上脚就会出现一个USB标志,如果没有出现则表示开发板启动失败或未成功连接电脑。下图的左边是未接入开发板的IDE,右边是接入了开发板的IDE。

图 11

5 运行例程

目前烧录固件的TF卡内有所有嘉楠官方提供的例程,源码+模型文件+字体等都在TF卡中,当立创庐山派开发板连接电脑后,用户可以直接在电脑的CanMV设备中的sdcard文件夹中找到所有文件

图 12

⚠️注意:

  1. 不要使用IDE自带的例程,版本太老可能无法直接运行,需要使用固件自带的例程。
  2. 例程默认的摄像头使用的是CSI2,就是开发板正面的那个立式的22P摄像头座,在运行和摄像头有关的例程时需要注意。
  3. 为了避免占用USB传输带宽,建议将例程拷贝至电脑本地存储后再打开复制。

其历程examples,libs,res目录结构如表所示:

sdcard:
├─examples
│  ├─01-Micropython-Basics
│  │      demo_crc16.py
│  │      demo_files.py
│  │      demo_fs_info.py
│  │      demo_globals.py
│  │      demo_json.py
│  │      demo_logging.py
│  │      demo_sha256.py
│  │      demo_sys_info.py
│  │      demo_thread.py
│  │      demo_time.py
│  │      demo_view_mem.py
│  │      demo_yield.py
│  │      demo_yield_task.py
│  │
│  ├─02-Media
│  │      acodec.py
│  │      audio.py
│  │      mp4muxer.py
│  │      rtsp_server.py
│  │      video_decoder.py
│  │      video_encoder.py
│  │      video_player.py
│  │
│  ├─03-Machine
│  │  ├─adc
│  │  │      adc.py
│  │  │
│  │  ├─fft
│  │  │      fft.py
│  │  │
│  │  ├─fpioa
│  │  │      fpioa.py
│  │  │
│  │  ├─i2c
│  │  │      i2c_master.py
│  │  │      i2c_slave.py
│  │  │
│  │  ├─pin
│  │  │      pin.py
│  │  │
│  │  ├─pwm
│  │  │      pwm.py
│  │  │
│  │  ├─rtc
│  │  │      rtc.py
│  │  │
│  │  ├─spi
│  │  │      spi.py
│  │  │
│  │  ├─timer
│  │  │      timer.py
│  │  │
│  │  ├─touch
│  │  │      touch.py
│  │  │
│  │  ├─uart
│  │  │      uart.py
│  │  │      uart1.py
│  │  │
│  │  └─wdt
│  │          wdt.py
│  │
│  ├─04-Cipher
│  │      cipher.py
│  │
│  ├─05-AI-Demo
│  │      dynamic_gesture.py
│  │      eye_gaze.py
│  │      face_detection.py
│  │      face_landmark.py
│  │      face_mesh.py
│  │      face_parse.py
│  │      face_pose.py
│  │      face_recognition.py
│  │      face_registration.py
│  │      falldown_detect.py
│  │      finger_guessing.py
│  │      hand_detection.py
│  │      hand_keypoint_class.py
│  │      hand_keypoint_detection.py
│  │      hand_recognition.py
│  │      keyword_spotting.py
│  │      licence_det.py
│  │      licence_det_rec.py
│  │      nanotracker.py
│  │      object_detect_yolov8n.py
│  │      ocr_det.py
│  │      ocr_rec.py
│  │      person_detection.py
│  │      person_keypoint_detect.py
│  │      puzzle_game.py
│  │      segment_yolov8n.py
│  │      self_learning.py
│  │      space_resize.py
│  │      tts_zh.py
│  │
│  ├─06-Display
│  │      display_hdmi.py
│  │      display_lcd.py
│  │      display_virt.py
│  │
│  ├─07-April-Tags
│  │      find_apriltags.py
│  │      find_apriltags_3d_pose.py
│  │
│  ├─08-Codes
│  │      find_barcodes.py
│  │      find_datamatrices.py
│  │      find_qrcodes.py
│  │
│  ├─09-Color-Tracking
│  │      automatic_grayscale_color_tracking.py
│  │      automatic_rgb565_color_tracking.py
│  │      black_grayscale_line_following.py
│  │      image_histogram_info.py
│  │      image_statistics_info.py
│  │      multi_color_code_tracking.py
│  │      single_color_code_tracking.py
│  │
│  ├─10-Drawing
│  │      arrow_drawing.py
│  │      circle_drawing.py
│  │      cross_drawing.py
│  │      ellipse_drawing.py
│  │      flood_fill.py
│  │      image_drawing.py
│  │      image_drawing_advanced.py
│  │      image_drawing_alpha_blending_test.py
│  │      keypoints_drawing.py
│  │      line_drawing.py
│  │      rectangle_drawing.py
│  │      text_drawing.py
│  │
│  ├─11-Feature-Detection
│  │      edges.py
│  │      find_blobs.py
│  │      find_lines.py
│  │      find_rects.py
│  │      hog.py
│  │      lbp.py
│  │      linear_regression_fast.py
│  │
│  ├─12-Image-Filters
│  │      adaptive_histogram_equalization.py
│  │      blur_filter.py
│  │      color_binary_filter.py
│  │      color_light_removal.py
│  │      edge_filter.py
│  │      erode_and_dilate.py
│  │      gamma_correction.py
│  │      grayscale_bilateral_filter.py
│  │      grayscale_binary_filter.py
│  │      grayscale_light_removal.py
│  │      histogram_equalization.py
│  │      kernel_filters.py
│  │      lens_correction.py
│  │      linear_polar.py
│  │      log_polar.py
│  │      mean_adaptive_threshold_filter.py
│  │      mean_filter.py
│  │      median_adaptive_threshold_filter.py
│  │      median_filter.py
│  │      midpoint_adaptive_threshold_filter.py
│  │      midpoint_filter.py
│  │      mode_adaptive_threshold_filter.py
│  │      mode_filter.py
│  │      negative.py
│  │      perspective_and_rotation_correction.py
│  │      perspective_correction.py
│  │      rotation_correction.py
│  │      sharpen_filter.py
│  │      unsharp_filter.py
│  │      vflip_hmirror_transpose.py
│  │
│  ├─14-Socket
│  │      http_client.py
│  │      http_server.py
│  │      iperf3.py
│  │      network_lan.py
│  │      network_wlan_ap.py
│  │      network_wlan_sta.py
│  │      tcp_client.py
│  │      tcp_server.py
│  │      udp_clinet.py
│  │      udp_server.py
│  │
│  ├─15-LVGL
│  │  │  lvgl_demo.py
│  │  │  lvgl_touch_demo.py
│  │  │
│  │  └─data
│  │      ├─font
│  │      │      lv_font_simsun_16_cjk.fnt
│  │      │      montserrat-16.fnt
│  │      │
│  │      └─img
│  │              animimg001.png
│  │              animimg002.png
│  │              animimg003.png
│  │
│  ├─16-AI-Cube
│  │      ClassificationApp.py
│  │      DetectionApp.py
│  │      MultiLabelApp.py
│  │      OCR_Det.py
│  │      SegmentationApp.py
│  │      SelfLearningApp.py
│  │
│  ├─17-Sensor
│  │      camera_dual_bind_hdmi.py
│  │      camera_mirror_flip.py
│  │      camera_single_bind_hdmi.py
│  │      camera_single_bind_lcd.py
│  │      camera_single_show_hdmi.py
│  │      camera_single_show_lcd.py
│  │      camera_snapshot_and_save.py
│  │      camera_triple_bind_hdmi.py
│  │
│  ├─18-NNCase
│  │  │  ai2d+kpu.py
│  │  │  kpu.py
│  │  │
│  │  └─face_detection
│  │          face_detection_320.kmodel
│  │          face_detection_ai2d_input.bin
│  │          face_detection_ai2d_output.bin
│  │          prior_data_320.bin
│  │
│  ├─99-HelloWorld
│  │      helloworld.py
│  │
│  ├─ai_test_kmodel
│  │      embedding.kmodel
│  │      insect_det.kmodel
│  │      landscape_multilabel.kmodel
│  │      ocr_det_int16.kmodel
│  │      ocr_rec_int16.kmodel
│  │      ocular_seg.kmodel
│  │      veg_cls.kmodel
│  │
│  ├─ai_test_utils
│  │      0.jpg
│  │      1.jpg
│  │      2.jpg
│  │      3.jpg
│  │      4.jpg
│  │      5.jpg
│  │      6.jpg
│  │      7.jpg
│  │      8.jpg
│  │      dict.txt
│  │
│  ├─kmodel
│  │      cropped_test127.kmodel
│  │      eye_gaze.kmodel
│  │      face_alignment.kmodel
│  │      face_alignment_post.kmodel
│  │      face_detection_320.kmodel
│  │      face_landmark.kmodel
│  │      face_parse.kmodel
│  │      face_pose.kmodel
│  │      face_recognition.kmodel
│  │      gesture.kmodel
│  │      handkp_det.kmodel
│  │      hand_det.kmodel
│  │      hand_reco.kmodel
│  │      hifigan.kmodel
│  │      kws.kmodel
│  │      licence_reco.kmodel
│  │      LPD_640.kmodel
│  │      nanotracker_head_calib_k230.kmodel
│  │      nanotrack_backbone_sim.kmodel
│  │      ocr_det_int16.kmodel
│  │      ocr_rec_int16.kmodel
│  │      person_detect_yolov5n.kmodel
│  │      recognition.kmodel
│  │      yolov5n-falldown.kmodel
│  │      yolov8n-pose.kmodel
│  │      yolov8n_320.kmodel
│  │      yolov8n_seg_320.kmodel
│  │      zh_fastspeech_1_f32.kmodel
│  │      zh_fastspeech_2.kmodel
│  │
│  └─utils
│      │  dict.txt
│      │  fist.bin
│      │  five.bin
│      │  phone_map.txt
│      │  pinyin.txt
│      │  prior_data_320.bin
│      │  shang.bin
│      │  shear.bin
│      │  small_pinyin.txt
│      │  wozai.wav
│      │  xia.bin
│      │  you.bin
│      │  zuo.bin
│      │
│      ├─db
│      │      readme.txt
│      │
│      └─db_img
│              id_1.jpg
│              id_2.png
│
├─libs
│      AI2D.py
│      AIBase.py
│      PipeLine.py
│      RtspSever.py
│
└─res
    └─font
            LICENSE.txt
            readme.txt
            SourceHanSansSC-Normal-Min.ttf

打开CanMV IDE K230,找到你感兴趣的例程,复制粘贴去就好了(亦可以点击IDE左上角的文件->打开文件来加载需要用到的例程),比如我这里打开examples->05-AI-Demo->object_detect_yolov8n.py,复制进IDE里面,然后连接开发板后点击左下角的绿色运行小三角就可以使用了,如下动图所示:

图 13

让代码离线运行

1 前期知识提示

打开IDE后连接开发板,此时点击左下角的绿色三角运行代码,MicroPyhon脚本并不会保存到TF卡中,而是保存到内存中并开始运行,一旦板子断电,程序(也就是脚本)就丢失了。

图 0

在实际开发中,当我们通过 IDE 在线运行验证调试好后,就需要将我们的脚本保存到TF卡中,并让庐山派开发板在脱离电脑连接的情况下,上电后自动运行我们的程序。

庐山派开发板的CanMV固件在上电后会自动执行micropython,他会在sdcard目录中去寻找boot.pymain.py这两个文件。

boot.py

  • 启动文件:这是庐山派启动时首先执行的文件,类似于我们嵌入式开发中的初始设置文件。
  • 主要功能:
    • 配置硬件环境(如I/O引脚、电源管理)。
    • 初始化必要的模块(如串口、网络)。
    • 一般只用作系统配置,不进行主任务逻辑处理。如果代码较为简单的话,一般不需要建立boot.py文件
    • 一定要注意不能有死循环,否则他会无法执行 main.py

main.py

  • 主程序文件:在 boot.py 执行完毕后,系统会自动执行 main.py
  • 主要功能:
    • 实现用户的核心逻辑。
    • 比如图像采集、AI处理、通信或其他任务。

执行流程:

  1. 上电/复位 → 执行 boot.py,如果找不到就不执行。
  2. boot.py 执行完成 → 自动执行 main.py
  3. main.py 执行完成 → 程序可能结束(如果没有 while 循环维持运行,那么主程序会退出)。

2 如何操作

2.1 用CanMV IDE K230来保存

一般情况下我们只需要用到main.py,当你需要用到boot.py的时候也不需要再看这篇文档了。

首先打开我们的IDE,连接至我们的开发板后,左下角的绿色三角按钮就会出现了,此时准备好我们的程序,点击菜单栏的工具->save open script to CanMV board (as main.py),就可以把我们当前打开的文件给重命名为main.py,保存到TF卡的sdcard根目录下了。

中间会弹出来一个对话框提示我们是否要去除注释并将空格转化为制表符直接选择是然后等待保存进度条走完就可以了

图 1

此时我们就可以断电或者按板子上的复位,检查开发板是否会自动执行你保存的程序了。

2.2 手动保存

在之前我们已经知道了,庐山派在上电后,会自动去找main.py来执行。所以我们只需要将main.py保存到我们的TF卡里面就行了。

开发板连接电脑后会自动被当做一个U盘设备,我们只需要把自己的程序文件名重命名为main.py,再把他复制到sdcard根目录下就好了,如下图所示:

图 2

此时我们就可以断电或者按板子上的复位,检查开发板是否会自动执行你保存的程序了。

### 庐山 K230 HTTP 相关功能解析 对于庐山 K230 开发板而言,其具备多种外设接口支持,其中包括 GPIO 接口用于连接外部设备并实现控制逻辑[^1]。然而关于特定提及的 “K230http”,这似乎并不是官方文档中的标准术语或者特性描述。 如果意图探讨的是通过该开发板进行HTTP协议相关的网络通信,则需注意: - **硬件基础**:K230 支持丰富的外围接口,能够借助这些接口来接入Wi-Fi模组或其他形式的联网组件,从而间接获得互联网访问能力。 - **软件层面**:为了使能HTTP请求发送接收等功能,在应用层面上可以采用适合嵌入式系统的轻量级库比如uNetworking/uSockets等编写相应的程序代码片段来进行网页抓取、API调用等活动;另外也可以考虑利用更高层次的语言环境如MicroPython简化编程工作。 考虑到上述情况,“K230http”可能是指基于此平台构建的应用场景之一——即让K230作为客户端发起HTTP(S)请求或响应的服务端操作。具体实施细节取决于项目需求以及所选用的技术栈组合。 ```c #include <esp_http_client.h> void http_get_request(const char *url){ esp_http_client_config_t config = { .url = url, }; esp_http_client_handle_t client = esp_http_client_init(&config); esp_err_t err = esp_http_client_perform(client); if (err == ESP_OK) { printf("Status code: %d\n", esp_http_client_get_status_code(client)); } else { printf("Error\n"); } esp_http_client_cleanup(client); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值