micropython解释器原理_在 ESP32 上运行 C 解释器

我用有道翻译给大家翻一段:

介绍

我在Arduino IDE中花了相当多的时间等待草图的编译和上传,结果发现草图的行为与我预期的不一致,然后我考虑在哪里添加串行。printx语句的草图,再次等待编译和上传,并失去头发试图得到我想要的结果。还有什么比输入一个if (j==3 && k>11) Debug()更好的呢?当变量满足条件要求时,能够从程序中获得调试信息?

所以…我为基于ESP32的委员会准备了一个C语言解释器,它允许我使用他们的内置文件系统进行持久的程序存储,在一个浏览器页面中编辑和解释我的程序,而不需要编译和上传周期。更好的是,我还内置了对常用I/O Arduino功能的支持,如模拟写、数字读/写等,并提供了高精度的伺服定位功能。但是,最好的部分可能是我添加了一个调试器到解释器中,它支持条件调试跟踪,并在程序执行时报告变量值的条件监视函数。本文感谢那些为我的解释器构建工具的人,并解释了如何在ESP32上使用它。

背景

关于解释代码和编译代码以及每种方法的优缺点的讨论还在继续。可以这样说,解释后的代码运行起来要比编译后的代码慢,而且许多解释器提供的错误描述也不够出色。但是解释器以其作为原型工具的价值而闻名,并提供了快速的代码环境。另一个有用的解释器特性是,它可以很容易地向新手介绍如何创建有用的程序。

Zik Saleeba创建了picoc解释器,其源代码可以从https://gitlab.com/zsaleeba/picoc获得。这是一个C语言解释器的坚实基础,我对他的创造表示敬意。

大部分的web界面都是受Michael Molinari的esp8266 Basic的启发,并大量复制他的工作成果,可从https://github.com/esp8266/Basic获得。

使用的代码

本文顶部的参考资料是编译和将解释器上传到ESP32所需要的文件。当你在Arduino IDE中使用它的时候,你首先会注意到的是,我敢打赌,你从来没有见过Arduino草图上有这么多的标签。这在很大程度上是由于在Arduino IDE中保留了picoc解释器的文件结构,并简化了C和c++代码部分的隔离。好消息是,网络服务器的草图提供了一个非常全面的锻炼Arduino对象,一个完全透明的译员,演示了如何使用C语言代码在Arduino IDE,并可以提供无数个小时的代码浏览看看这是如何工作的。

但是,我希望您不是来这里了解C解释器的内部原理的。我认为您阅读本文是因为您想了解如何在ESP32上运行C解释器。口译员的使用记录在以下各段。如果您想了解更多的细节,您可以查询esp32_picoc_c_language_interpretation .pdf。

在将草图上传到ESP32板之前,使用Tools/ESP32草图数据上传菜单项将草图文件夹中的数据目录的内容放到ESP32板上。您还需要编辑ESP32Program/data/data/WIFIname.dat和WIFIpass.dat文件,然后才能上传,以匹配您的WiFi环境。当您将ESP2Program sketch上传至ESP32板时,它将以500,000波特的速度在串口上运行。在板子复位后,咨询串行监视器将给你板子正在使用的IP地址。ESP32Program。zip文件中包含的ino文件在开头有几个重要的#define语句。

普通的C代码我觉得就不用翻译了。一般的文字,结合着原文,差不多能看明白了。

好的,让我来解答你的问题。 首先,你需要连接 ESP32 和 MLX90614。MLX90614 是一种红外温度传感器,可以通过 I2C 接口与 ESP32 通信。你需要将 SDA 和 SCL 引脚连接到 ESP32 上的相应引脚。你还需要连接一个电源引脚和一个地引脚。 接下来,你需要在 ESP32 上安装 Micropython。你可以使用 esptool.py 工具将 Micropython 固件烧录到 ESP32 上。一旦 Micropython 安装好了,你就可以使用 REPL(交互式解释器)来测试你的 ESP32 和 MLX90614 是否正常工作。可以使用 `i2c.scan()` 命令来查找 I2C 设备的地址。 ```python import machine i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21)) devices = i2c.scan() print(devices) ``` 接下来,你需要编写代码来读取 MLX90614 的温度值。你需要使用 MLX90614 的 datasheet 来了解如何读取温度。以下是一个简单的代码示例: ```python import machine import time i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21)) address = 0x5A # MLX90614 的地址 def read_temperature(): i2c.writeto(address, bytes([0x07])) # 发送命令,选择 TA 寄存器 time.sleep_ms(5) raw_data = i2c.readfrom(address, 3) # 读取 3 个字节的数据 temp = (raw_data[0] + (raw_data[1] << 8)) * 0.02 - 273.15 # 计算温度值 return temp while True: temp = read_temperature() print("Temperature: {:.2f} C".format(temp)) time.sleep(1) ``` 这个代码会不断地读取温度值,并将其打印出来。你可以根据需要将温度值发送到其他设备或存储在数据库中等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值