3.1. PIKA - WIRELESS 开发板

我们骄傲地推出PIKA 派 - WIRELESS开发板,这是PikaPython官方首次推出的全流程、手把手教程的开发板。

在这个信息爆炸的新时代,嵌入式编程与Python结合,创造出了前所未有的应用可能性。而PikaPython,作为嵌入式Python的领军力量,成为了许多创新项目的核心动力。

为了培养与帮助下一代的开发者掌握这一创新技术,我们荣誉推出专为技术爱好者与新世代研发者设计的“PIKA 派 - WIRELESS”开发学习板。

“PIKA 派 - WIRELESS”的核心采用了业界知名、学习友好的ESP32S3。该芯片性能卓越、功能多样,绝对能满足您对嵌入式Python的所有探索与实验需求。这块开发板集成了大量的硬件资源(8M的Flash、WIFI与4G通信、众多传感器),并且提供了许多扩展接口,为您在各种项目中展翅翱翔创造了条件。配合此开发学习板,您将得以深度体验PikaPython的魅力,锻炼自己的编程能力,并为未来的技术挑战做好万全的准备。

img

🛠 技术参数一览:

  • 主控:ESP32S3

  • 存储:FLASH 8M, PSRAM 8M, nand FLASH 128MB

  • 通信:WIFI、4G、RS485 接口

  • 显示:LCD 屏幕

  • 传感器:板载温湿度传感器、光敏电阻

  • 其他:蜂鸣器、继电器、12V供电、WS2812

此款开发板完整覆盖了内核移植、驱动适配、模块开发、事件驱动、应用开发到最佳实践的全流程。它旨在帮助开发者快速并深入地学习PikaPython在项目实战中的各种技术,并迅速掌握实战开发能力。

📚 课程亮点:

  1. PikaPython基础移植与脚本启动模式深入讲解

  2. ESP32实战系列,包括驱动适配、事件驱动等核心技术

  3. 深入嵌入式驱动框架设计与应用

  4. 嵌入式编程思想与最佳实践

    image-20230909174529904

我们精心准备的课程不仅确保您能在此开发板上掌握PikaPython的核心技能,还设计了许多案例和实战,确保您可以举一反三,轻松拓展到任何新的平台上。

探索、学习,然后再创新。这不仅是我们的信念,更是我们希望与大家共同实现的目标。期待与您共同探索PikaPython的无限可能!💡

购买链接:https://m.tb.cn/h.5eu8O7B?tk=AgpWdB6P4Op

下面是程住气大佬结合开发板和课程的内容编写的课程笔记,非常值得一读!

3.1.1. CMAKE 内核编译和应用

教程中的 makefile 和 CMake 工程可以在 Win 上运行,这样可以快速进行测试和进行仿真运行,后面可以移植到你的实际硬件平台上(例如 STM32、ESP32等)。

3.1.1.1. 官网

https://pikapython.com/

3.1.1.2. 先下载包管理器:用于拉取pikapython的源码

http://pikapython.com/doc//%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%8E%E6%A8%A1%E5%9D%97%E7%AE%A1%E7%90%86.html

image

3.1.1.3. 拉取内核源码

新建记事本requestment.txt,输入下面内容。

(不过即使没有这步,包管理器也会自动新建requestment.txt)

pikascript-core
PikaStdLib

其他可用版本查看:https://gitee.com/Lyon1998/pikascript/blob/master/packages.toml

然后执行包管理器,进行拉取代码。

运行预编译rust-msc-latest-win10.exe,它会将python文件预编译到pikascript-api中的C文件中去

image2

3.1.1.4. 编写应用主程序

新建main.c文件,代码如下:

#include<stdio.h>
#include"pikascript.h"

int main(int argc,char **argv)
{
	printf("hello world\r\n");
    //固件启动,需要编译
    PikaObj* pikaMain = pikaScriptInit();
}

3.1.1.5. 内核编译

官方视频是用 visual studio 来做的,这个软件太大了,家里网速慢,同时电脑有现成的 vscode,所以将分别采用 WIN 环境下 makefile 和 CMAKE 来编译。(其实是后续的 ESP32 视频,编译用的是 CMAKE,看不懂所以回头学了 CMAKE + makefile)

下载和安装MinGW32

下载地址: https://www.onlinedown.net/soft/10056269.htm

解压后,添加环境变量后:

95b7f3d6abb74a7212c67620e8db5aa

img

image-20231202162719952

makefile:

1.新建makefile文件,代码如下

2.执行make

TAR = pikapython
# 添加头文件搜索路径
INC = -I ./ -I ./pikascript-core -I ./pikascript-api -I ./pikascript-lib/PikaStdLib

# 寻找源文件.c
SOURCES = $(wildcard *.c ./pikascript-api/*.c ./pikascript-core/*.c ./pikascript-lib/PikaStdLib/*.c)
OBJ = $(patsubst %.c,%.o,$(SOURCES))

# test:
# 	@echo $(SOURCES)
$(TAR):$(OBJ)
	gcc $^ -o $@  $(INC)

%.o:%.c
	gcc -c $^ -o $@ $(INC)

clean:
	rm -rf *.o ./**/*.o ./**/**/*.o $(TAR)

_images/image-20231202154030572.png

CMAKE:

CMAKE环境搭建:下载地址:https://cmake.org/download/

img

img

img

img

img

CMAKE开始:

	1.新建CMakeLists.txt文件,代码如下.

    2.新建build文件夹,然后进入build文件,

    3.cmake .. 

	4.make 

  (2.3的步骤是为了简洁工程,cmake会生成一堆中间文件,这样中间文件全部在build文件夹里了)
# 指定使用的 cmake 的最低版本,可选,非必须,如果不加可能会有警告
cmake_minimum_required(VERSION 3.10)

# 生成工程名字
project(pikapython)

# GLOB查找.c文件
file(GLOB API_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-api/*.c)
file(GLOB CORE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-core/*.c)
file(GLOB LIB_SRC ${CMAKE_CURRENT_SOURCE_DIR}/pikascript-lib/PikaStdLib/*.c)


# 将所有的源文件组合在一起
set(SOURCE_FILES ${API_SRC} ${CORE_SRC} ${LIB_SRC} main.c)
# message("所有的.c文件:",${SOURCE_FILES})

# 添加头文件搜索路径
include_directories(${CMAKE_SOURCE_DIR}/pikascript-core)
include_directories(${CMAKE_SOURCE_DIR}/pikascript-api)
include_directories(${CMAKE_SOURCE_DIR}/pikascript-lib/PikaStdLib)

# 定义工程会生成一个可执行程序
add_executable(pikapython ${SOURCE_FILES})

image-20231202155152260

image-20231202155056347

3.1.1.6. 应用入门

修改main.py文件,加一句print(’hello world!’)

运行预编译rust-msc-latest-win10.exe

编译内核makefile/cmake

执行

_images/image-20231202160754059.png

3.1.2. ESP32 入门体验

3.1.2.1. 安装

3.1.2.1.1. 官方入门指南:入门指南

3.1.2.1.2. 下载地址:ESP-IDF下载地址

image-20240215152317535

这里选择 v5.1 版本,【一定一定一定】 要选 v5.1,v5.1.1不行!,v5.1.2也不行,后面会导致奇怪的问题!!!

(后面的截图中可能出现了 v5.1.2,这是当初使用 v5.1.2 的时候的截图,v5.1.2 已经掉坑里了!换回 v5.1 了! 一切以 v5.1 为准!)

下载完,一路next就行 2

3.1.2.2. 新建工程、编译、下载

# 打开esp-idf,切目录(这个目录后续用于插件,创建使用模板)
cd esample/get-start

# 新建工程
idf.py create-project hello

# 设置芯片
idf.py set-target esp32s3

# 编写代码hello.c
#include <stdio.h>
void app_main(void)
{
    printf("hello world,god bless you");
}

# 编译
idf.py build

# 下载代码并开启监听(串口的查看,参看下图)
idf.py flash -p COM8 monitor

# 退出监听,键盘快捷键
ctrl+]

3

4

3.1.2.3. vscode插件

之前的操作都是使用命令行,使用vscode+esp32插件,快乐加倍

3.1.2.4. vscode插件复制

5

打开命令面板:ctrl+shift+p 6

7

8

9

3.1.2.5. 点灯

插件新建工程

10

11

12

原理图 13

插件按钮 14

#include <stdio.h>
#include "driver/gpio.h"
#include "FreeRTOS/freertos.h"
#include "FreeRTOS/task.h"

#define LED2_PIN 4
#define LED1_PIN 7

void led_init(int index)
{
    gpio_config_t led_pin_config;
    led_pin_config.pin_bit_mask = 1<<index;
    led_pin_config.mode = GPIO_MODE_OUTPUT;
    led_pin_config.intr_type = GPIO_INTR_DISABLE;
    led_pin_config.pull_up_en = GPIO_PULLUP_DISABLE;
    led_pin_config.pull_down_en = GPIO_PULLDOWN_DISABLE;
    gpio_config(&led_pin_config);
}

void led_on(int index)
{    
    gpio_set_level(index, 1);
    
}

void led_off(int index)
{
    gpio_set_level(index, 0);
}

void app_main(void)
{
    printf("hello gogogo");
    led_init(LED1_PIN);
    led_init(LED2_PIN);
    while(1)
    {
        led_on(LED1_PIN);
        led_off(LED2_PIN);
        vTaskDelay(50);
        led_off(LED1_PIN);
        led_on(LED2_PIN);
        vTaskDelay(50);
    }
    
}

3.1.2.6. 组件开发

在ESP32的开发中,我们经常需要使用一些特定的功能模块,比如OLED显示屏、温湿度传感器、红外遥控器等等。为了方便使用这些模块,我们可以将它们封装成自定义组件,以便在不同的项目中重复使用。pikapython也是以组件形式来做的,可以方便让你移植pika,事半功倍。(我当时不懂组件,移植都是懵的)

本文将介绍如何在ESP32中创建自定义组件。

3.1.2.6.1. 创建组件目录

首先,我们需要在ESP32的工程目录下创建一个名为components的目录,用于存放自定义组件。

在components目录下,我们可以创建一个名为test的子目录,用于存放自定义组件的代码和头文件。

3.1.2.6.2. 创建组件代码

在test目录下,我们可以创建一个名为test.c的文件,用于实现自定义组件的功能。

例如,我们可以在test.c中实现一个名为my_function的函数,用于打印一条消息:

// test.c:
#include "test.h"

#include "stdio.h"

void my_function(void)
{
    printf("test component!\n");
}

3.1.2.6.3. 创建组件头文件

在test目录下,我们还需要创建一个名为test.h的头文件,用于声明自定义组件的接口。

例如,我们可以在test.h中声明my_function函数:

// test.h:
#ifndef test_H

#define test_H

void my_function(void);

#endif

3.1.2.6.4. 在工程中使用自定义组件

现在,我们已经创建了一个名为test的自定义组件。接下来,我们需要在工程中使用它。

首先,我们需要在工程的CMakeLists.txt文件中添加以下代码,以便告诉ESP32编译器在编译时包含test目录:

idf_component_register(SRCS "test.c"
                    INCLUDE_DIRS ".")

然后,我们可以在工程的主代码中包含test.h头文件,并调用my_function函数:

// hello.c:
#include "test.h"

void app_main(void)
{
    my_function();
}

3.1.2.6.5. 编译和运行工程

如果一切正常,你应该能够在终端中看到”Hello, world!”这条消息。

3.1.2.6.6. 更改组件名字,需要在主cmake中修改:

!15

16

3.1.2.7. 总结

在ESP32的开发中,自定义组件是一个非常有用的工具,可以帮助我们更好地组织和重用代码。在本文中,我们介绍了如何创建和使用自定义组件,希望对你有所帮助。

3.1.3. ESP32 移植 PikaPython

3.1.3.1. 近况

有点惭愧,鸽了将近三个月!年中公司在裁员,年底了项目没减,人却少了,工作996二个月,年底不好找工作忍了(万恶的资本)!

等忙完工作,好不容易抽出身。然后就是咳嗽、甲乙丙各种流,低烧、咳嗽、鼻涕将近一个月。肺都要咳出来,我太难了~

3.1.3.2. 下载pika包

pikapython下载包

1

3.1.3.3. 新建工程

参考第二遍教程,新建工程。

3.1.3.4. pikapython作为组件

  1. 新建文件夹components/pikapyhon

  2. 将pika包放入pikapyhon文件夹中

  3. 运行pikaPackage.exe

3.1.3.5. 修改CMAKE

  1. 新建CMakeLists.txt文件,这个跟esp32组件开发有关,每个组件都是由一个CMake来编译

  2. 编写CMake,需要懂CMake知识,

# 匹配所有.c的文件,并赋值给SOURCES变量
file(GLOB_RECURSE SOURCES *.c)

# 组件注册 
# SRCS ${SOURCES} 编译SOURCES变量下的文件
# INCLUDE_DIRS ... 头文件包含
idf_component_register(SRCS ${SOURCES}
                    INCLUDE_DIRS 
                    "pikascript-api"
                    "pikascript-core"
                    "pikascript-lib/PikaStdLib"
                    )

3.1.3.6. 编写主函数

#include <stdio.h>
#include "pikascript.h"

void app_main(void)
{
    printf("aaaa");
    PikaObj* pikaMain = pikaScriptInit();
}

2

3.1.3.7. 心得

移植这个还是挺简单的,跟pikapython内核编译差不多。

主要需要熟悉gcc、CMake、freertos、esp32开发的知识,不然真的无法下手。 如果对上面不是很了解,建议先熟悉上面的知识点,磨刀不误砍柴工。