# pikapython-air780e **Repository Path**: Lyon1998/pikapython-air780e ## Basic Information - **Project Name**: pikapython-air780e - **Description**: pikapython for air780e - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2023-11-21 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PikaPython for AIR780E DTU PikaPython 对 AIR780E 进行适配的社区项目,**硬件方案验证板**、**系统固件**、**PYTHON 脚本** 全开源。 欢迎大家一起参与,共建一个在 AIR780E/EP 上快速验证 PikaPython 的 DTU 验证平台。 方案验证板开放申请。 ## 参与设计的主要贡献者: 冰点(微信名)—— 元件选型、原理图、PCB设计、硬件测试 铭仁(微信名)—— 硬件测试 ## 硬件验证平台 - PIKA_DTU PIKAPYTHON DTU 方案验证板(硬件测试未完成) ![](asset/4d9828c3cfffcf04b83ab7162b06fc9.jpg) - 原理图 ![输入图片说明](asset/image.png) - [开源硬件资料](https://gitee.com/Lyon1998/pikapython-air780e/tree/master/hardware) ## 工程目录 https://gitee.com/Lyon1998/air780e/tree/master/project/pikapython ## Todo List - 硬件测试 (完成) | 项目 | 状态 | |-----|----| | USB | 完成 | | DC-DC 电源 | 完成 | | 232 | 完成 | | 485 | 完成 | | NAND FLASH | 完成 | | VI | 完成 | | AI | 完成 | | 4G | 完成 | | 继电器 | 完成 | - [平台适配](https://gitee.com/Lyon1998/air780e/blob/master/project/pikapython/src/pika_port.c) | 项目 | 状态 | | ---- | ---- | | 文件系统 | 完成 | | RTOS | 完成 | - [PYTHON 模块](https://gitee.com/Lyon1998/air780e/blob/master/project/pikapython/pikapython/requestment.txt) |项目|状态| | --- | --- | | os | 完成 | | json | 完成 | | _thread | 完成 | | socket | 完成 | | time | 完成 | | random | 完成 | | requests | 完成 | | mqtt | 完成 | | net | 未完成 | | flashdb | 未完成 | | sms | 未完成 | | sim | 未完成 | | voiceCall | 未完成 | | modbus | 未完成 | | fota | 未完成 | - [PYTHON 外设驱动适配](https://gitee.com/Lyon1998/air780e/tree/master/project/pikapython/pikapython/pikascript-lib/AIR780E) |项目|状态| | --- | --- | | RTC | 未完成 | | ADC | 未完成 | | GPIO | 完成 | | I2C | 未完成 | | PWM | 未完成 | | SPI | 未完成 | | TIMER | 未完成 | | UART | 未完成 | | WDT | 未完成 | ## SDK 文档 doc/Luat_soc_sdk.chm 打开是空白就右键改属性“解除锁定” ![d5635eddbdb67d6ff314194e7c3e75f](assets/d5635eddbdb67d6ff314194e7c3e75f.png) ## 编译 ``` build pikapython ``` ## 烧录 踩坑1:不要同时接其他的串口设备,不然会烧录失败 ## 连接 ![输入图片说明](assets/image.png) REST 后会出现 4 个 USB 虚拟串口,其中有一个(通常是第三个)是用户串口,连接后可以进入 Python 交互终端。 # 调试记录 ## 2023年12月9日 第一次打样(v1.3): - 10个打样,其中9个可以上电亮灯,一个测试了刷程序,USB 供电有啸叫声。 - 其中1个 USB 供电短路,不亮灯。 - BOOT 修改:去掉R31(选择按下时上拉BOOT,不然刷不了程序) - POWER:短接 R10 (上电POWER ON) ## 2023年12月16日 - USB 供电短路检查出是 USB 贴片的焊接问题,更换 USB 座后正常。 - USB 供电有轻微啸叫声属于正常现象 ## 2024年1月27日 - VI 和 AI 的硬件修改 ![输入图片说明](asset/a272820360e30ff6753b43fa5ae54996_.jpg) ![输入图片说明](asset/8a6f850358ebd222713390e2a7e06eb.png) 这里焊一个150欧电阻可以测试, 把R11拆掉焊到这里来 - RS232 测试完成 - RS485 接收数据正常,发送数据异常,测试条件使用下面的 LUATOS 脚本 ``` lua -- LuaTools需要PROJECT和VERSION这两个信息 PROJECT = "uart_irq" VERSION = "1.0.0" log.info("main", PROJECT, VERSION) -- 引入必要的库文件(lua编写), 内部库不需要require sys = require("sys") if wdt then --添加硬狗防止程序卡死,在支持的设备上启用这个功能 wdt.init(9000)--初始化watchdog设置为9s sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗 end log.info("main", "uart demo") local uartid = 2 -- 根据实际设备选取不同的uartid --初始化 local result = uart.setup( uartid,--串口id 115200,--波特率 8,--数据位 1--停止位 ) --循环发数据 sys.timerLoopStart(uart.write,10000, uartid, "test") -- 收取数据会触发回调, 这里的"receive" 是固定值 uart.on(uartid, "receive", function(id, len) local s = "" repeat -- s = uart.read(id, 1024) s = uart.read(id, len) if #s > 0 then -- #s 是取字符串的长度 -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到 -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583 log.info("uart", "receive", id, #s, s) -- log.info("uart", "receive", id, #s, s:toHex()) end if #s == len then break end until s == "" end) -- 并非所有设备都支持sent事件 uart.on(uartid, "sent", function(id) log.info("uart", "sent", id) end) -- sys.taskInit(function() -- while 1 do -- sys.wait(500) -- end -- end) -- 用户代码已结束--------------------------------------------- -- 结尾总是这一句 sys.run() -- sys.run()之后后面不要加任何语句!!!!! ``` ## 2024年2月5日 关于 485 的接收问题,Seny lee 的分析: ``` 关于RS485,我个人的分析哈!理论上在接收模式下,TX为高电平,只有当TX电平大于等于3V3的时候,PNP三极管才会完全截止,此时RE为低电平,处于正常的接收状态下。 一般的3.3V的MCU,IO输出高电平的时候是会完全为高电平的,且PNP三极管一般上拉电阻是直接拉到IO口的。所以正常情况下PNP是可以完全处于截止状态的。 但是我看PikaPython for AIR780E的电路,780E引脚是1.8V/3.3V兼容引脚。加上 PNP三极管是内置的上拉电阻并不是完全的上拉到IO,而是上拉到三极管的基极。这时候很有可能会导致PNP三极管没有完全截止,最后导致RE的电压并不是完全为低电平。我测量的情况是有2.1V的电压,最终导致RE检测为高,并不是电平,所以无法进入接收模式。 个人的初步分析哈,不一定完全正确哈!我一般的自动手法电路是用NPN三极管,因为NPN三极管是高电平导通,其导通电压理论上只需要0.7V以上就可以保证三极管导通,所以其开关特性会比用PNP三极管的开关频率更高!我用NPN三极管测试在460800比特率下做过长期测试,没有出现过任何丢包现象。 ``` 验证后确实如此,固件启动时加入 luat_pm_iovolt_ctrl(0,3300) 即可。 # 原 SDK README [![Github Actions](https://github.com/openLuat/luatos-soc-2022/actions/workflows/ci.yaml/badge.svg?branch=master)](https://github.com/openLuat/luatos-soc-2022/actions/workflows/ci.yaml) ## 使用前须知 1. **强烈推荐使用git来下载本代码库**, 不会命令行操作git可以用 [tortoiseGit](https://tortoisegit.org/download/) 2. 本CSDK底层是没有AT指令的,不存在"调用某某AT指令"的情况 ## 文档中心 [CSDK软件开发资料](https://doc.openluat.com/wiki/37?wiki_page_id=4544) ## 介绍 CSDK for ABCDEGF, 适用于所有基于ABCDEGF的合宙模组, 包括衍生型号及海外型号: * Air780E 合宙主推封装 * Air600E 兼容友商的封装 * Air700E 极致小封装 * Air780EG 带GNSS定位 * Air780EX 邮票孔封装 ## 应用文档 1. 添加自定义数据到指定区域并[合成binpkg](project/example_flash), 用于量产刷机 2. [脱离本csdk编译无依赖的库文件](doc/build_lib_by_gcc.md) 3. CSDK调试指南 https://doc.openluat.com/article/4984 4. Linux/Mac刷机工具(测试版) https://github.com/openLuat/ectool2py 6. [差分升级所需要工具,支持docker](tools/dtools) ## 目录说明 * PLAT 打包好的sdk, 含协议栈, 部分源码, 头文件, 打包工具 * project 项目文件, 每个不同的项目代表不同的demo或者turnkey方案 * xmake.lua 主编译脚本, 一般不需要修改 ## 编译说明 1. 安装xmake, **选取加入PATH**, 建议安装到C:\Program Files下,其他目录可能会出问题; xmake下载地址:https://xmake.io/#/guide/installation windows下可以直接访问:https://github.com/xmake-io/xmake/releases ,下载系统对应的xmake-2.7.3-win32.exe或者xmake-2.7.3-win64.exe即可. 比2.7.3更高的版本也是可以的. **注意:环境变量需重启电脑生效** 2. 如果编译example的话在本代码库的根目录执行`build.bat example`进行编译 3. 生成的binpkg位于`out`目录, 日志数据库文件位于`PLAT`目录 ## 如何新增自己的项目 建议将 `project/example` 拷贝一份,作为验证项目 1. project新建目录,目录名称和项目名称一致,目录下新建xmake.lua,内容仿照着example写,核心是TARGET_NAME必须和项目名称一致 2. 代码路径当然不是限制的,在SDK的任何目录,甚至电脑上的其他地方,前提是你会改project里xmake.lua内的源码路径 3. 根目录执行build.bat 你的项目名称 ## 项目中新增入口函数 本CSDK中没有main函数,需要通过宏注册入口函数 * 加入头文件common_api.h * 类似于`void main(void)`,但是可以任意名字,不能有入口参数和返回参数,同时允许多个入口 * 通过INIT_HW_EXPORT INIT_DRV_EXPORT INIT_TASK_EXPORT这3个宏修饰后,系统初始化的时候会调用function,不同的宏涉及到调用顺序不同 * 大优先级上`INIT_HW_EXPORT` > `INIT_DRV_EXPORT` > `INIT_TASK_EXPORT` * 这3个宏有统一用法`INIT_HW_EXPORT(function, level)`,其中function就是入口函数,level是小优先级,填"0","1","2"...(引号要写的),引号里数字越小,优先级越高。 * `INIT_HW_EXPORT`一般用于硬件初始化,GPIO之类的,可以没有 * `INIT_DRV_EXPORT`一般用于外设驱动初始化,初始化外部器件之类的,打开电源,提供时钟之类的,可以没有 * `INIT_TASK_EXPORT`一般用于初始化任务,用户代码基本上都是跑在任务里,原则上必须有 ## 在SDK外存放项目文件的编译方法 假设项目路径是 `D:\github\ABCDEGF-webabc` , 目录结构如下 ``` D:\github - ABCDEGF-webabc - code - xmake.lua - src app_main.c task_mqtt.c - inc app_main.h RTE_Device.h - doc - README.md ``` 编译方式: ``` set PROJECT_DIR=D:\github\ABCDEGF-webabc\code build webabc ``` 注意: code\xmake.lua里面的TARGET_NAME,对应命令行的项目名, `webabc` 恢复到默认项目查找逻辑, 之后就能恢复到 project/xxx 查找xmake.lua ``` set PROJECT_DIR= build luatos ``` ## 在不联网环境下初次编译的补充说明 在有网的环境下, xmake会自行下载gcc工具链. 但如果无法联网, 或者网络受限的情况, 通常会有这种提示: ``` error: fatal: not a git repository ``` 或者git/http连接失败的提示. 故这里提供离线gcc工具链下载和编译的方法 1. 下载gcc for arm工具链[windows版](http://cdndownload.openluat.com/xmake/toolchains/gcc-arm/gcc-arm-none-eabi-10.3-2021.10-win32.zip)/[linux版](http://cdndownload.openluat.com/xmake/toolchains/gcc-arm/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2) 2. 解压, 不要选太深的目录, 不要包含中文字符和特殊符号, 建议解压到`D盘根目录`, 压缩包内自带一层目录`gcc-arm-none-eabi-10.3-2021.10` 3. 假设解压后的路径是 `D:\gcc-arm-none-eabi-10.3-2021.10`, 检查 `D:\gcc-arm-none-eabi-10.3-2021.10\bin\arm-none-eabi-g++.exe` 是否存在, 如果不存在, 那肯定是多一层目录. **务必检查!!!** 4. 用文本编辑器(例如vscode)打开 `本代码库` 的 `build.bat`, 修改内容如下 ``` 原本的内容: rem set GCC_PATH=E:\gcc_mcu 修改成set开头的语句,注意是去掉rem并修改值. set GCC_PATH=D:\gcc-arm-none-eabi-10.3-2021.10 ``` `重新打开`一个`命令行cmd`, 进入`本代码库`,执行 `build.bat` 即可正常编译. 5. 测试ok后, 可以考虑将上述环境变量GCC_PATH放入系统的环境变量设置中, 然后还原`build.bat` ## Linux下编译的额外的说明 安装Xmake可以使用官方提供的一键脚本 ```shell curl -fsSL https://xmake.io/shget.text | bash #使用curl进行安装 wget https://xmake.io/shget.text -O - | bash #使用wget进行安装 ``` 当前仅测试了 Ubuntu 16.04 和 Ubuntu 20.04 amd64版本 需要安装额外的32位支持, 否则执行fcelf时报文件不存. 后续可能会有64bit fcelf提供 ```shell dpkg --add-architecture i386 && apt update apt-get install -y lib32z1 binutils:i386 libc6:i386 libgcc1:i386 libstdc++5:i386 libstdc++6:i386 p7zip-full ``` ## macos 下编译的额外的说明 编译 wine 环境的 docker ```shell ./build-wine-docker.sh ``` ## 授权协议 [MIT License](LICENSE)