标签: micropython

为什么 Micropython 'const' 不接受浮点值?

大多数 Micropython 端口都包含一个“ micropython”模块,该模块具有名为“ ”的特定函数const()。我相信它的行为很像#defineC 中的“”,但是,它只接受整数。有人知道为什么吗?你可以在 C 中声明浮点常量,那么为什么在 micropython 中不可用呢?

我想有效地存储用于在单位之间转换的值,但其中许多是浮点值...(我考虑将它们乘以 10^x,然后在运行时除以该值,但这可能需要像只要将浮点数存储在变量中并让代码使用查找表即可)。

为什么我们只能用 声明整数micropython.const()

干杯:)

python constants micropython

6
推荐指数
1
解决办法
697
查看次数

ESP8266 Micropython-连接到大学Wi-fi(WPA2 Enterprise PEAP)

我有一块带有运行Micropython固件v1.8.7的ESP8266芯片的电路板。我的要求是通过大学Wi-Fi使用WebREPL,后者使用WPA2 Enterprise EAP-MSCHAPv2身份验证。到目前为止,我的Google-fu告诉我Arduino用户已经可以连接到WPA2 Enterprise EAP-TLS(基于证书的身份验证)(链接),但不能连接(SSID,用户名,密码)网络。

到目前为止,我所看到的关于该主题的所有线索似乎都是最迟于2016年中开始的,所以我想知道自那时以来是否有人能够弄清楚该怎么做。我以前从未涉足网络相关的东西(我也不是一个出色的程序员),所以上面所有的大词对我来说都是很新的。因此,我有以下问题:

  1. 这仅仅是ESP8266的固有限制吗?还是可以做到?讨论似乎暗示可以完成,但功能需要进行编码。
  2. 是否可以通过某种方式从WPA2 Enterprise分支出WPA2个人连接,以供ESP8266和我的PC使用?到目前为止,我一直尝试使用Connectify尝试一个热点,但是那里没有运气。

感谢您提供的任何帮助。如果我没有提供任何相关信息,请告诉我,我将对其进行编辑。

编辑:@MaximilianGerhardt这是在WPA2 Personal上对我有效的方法:

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('ssid','pwd')
wlan.ifconfig()

import webrepl
webrepl.start()
Run Code Online (Sandbox Code Playgroud)

在WPA2 Enterprise上,我曾希望更改此行是可行的,但没有任何乐趣:

wlan.connect('ssid',auth=WPA2_ENT,'user','pwd')
Run Code Online (Sandbox Code Playgroud)

谢谢,我将研究Espressif Non-OS SDK V2.0.0,看看是否可以使它工作。

python iot esp8266 micropython arduino-esp8266

5
推荐指数
1
解决办法
2326
查看次数

main.py崩溃后,如何重设ESP8266 MicroPython?

我有一个运行MicroPython的NodeMCU ESP8266开发板。我在ESP8266上运行Web服务器。这是我基于这些板之一的第一个物联网项目。

下面是代码片段。

这是在中执行的main.py。时不时地,由于某种原因导致代码崩溃(可能基于计时和请求)。当main.py退出时,不管出于什么原因,我在蟒蛇CLI回落。

我希望这种情况发生时(如果没有更好的方法)重置主板。

重新启动/重置ESP8266的最佳方法是什么?

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(5)
print('listening on', addr)

while True:
    cl, addr = s.accept()
    print('client connected from', addr)
    cl_file = cl.makefile('rwb', 0)
    print("Request:")
    while True:
        line = cl_file.readline()
        print("Line:" , line)
        if not line or line == b'\r\n':
            print("breaking")
            break
        if line == b'GET /active HTTP/1.1\r\n':
Run Code Online (Sandbox Code Playgroud)

iot nodemcu esp8266 micropython

5
推荐指数
3
解决办法
4120
查看次数

如何在Mac OS X上安装libffi-dev

我正在尝试在unix上实现micropython,这需要libffi-dev.我安装这种方式brew install libffi-dev.但似乎没有找到libffi-dev.

有没有办法libffi-dev在Mac OS 上安装.谢谢.

macos homebrew libffi micropython

5
推荐指数
1
解决办法
7961
查看次数

如何检查Micropython umqtt客户端是否已连接?

我想在失败时将 MQTT 客户端重新连接到服务器。

我用于uqmtt.robust重新连接:它可以解决某些故障,但不能处理互联网断开连接。我正在考虑这样做:

while True:
 if c.isConnected():# how to check this?
  c.wait_msg()
 else:
  c=MQTTClient(params)
  c.connect() #reconnect trial
Run Code Online (Sandbox Code Playgroud)

我尝试通过读取 PINGRESP 来解决,但 ping 是有间隔的,所以我无法确定连接是否有效。

mqtt esp8266 micropython

5
推荐指数
1
解决办法
3999
查看次数

在 Circuit Playground Express 上使用 Circuit Python 从主机接收数据

我正在使用 Adafruit 的 Circuit Playground Express,并使用 Circuit Python 对其进行编程。

我想读取通过 USB 连接 Circuit Playground Express 的计算机传输的数据。使用input()工作正常,但我宁愿获取串行缓冲区,以便在没有输入时循环继续进行。就像是serial.read()

import serial不适用于 Circuit Python,或者也许我必须安装一些东西。我还能做些什么来使用 Circuit Python 读取串行缓冲区吗?

micropython adafruit

5
推荐指数
3
解决办法
1万
查看次数

ESP32 - 使用 MicroPython 的 MQTT 到 AWS IoT

我已将 ESP32 注册为 AWS IoT 上的一个事物,并下载了其各自的证书以及公钥和私钥。还通过我的终端中的以下命令验证了这些连接是否正确:

openssl s_client -connect host.iot.region.amazonaws.com:8443 -CAfile AmazonRootCA1.pem -cert certificate.pem.crt -key private.pem.key
Run Code Online (Sandbox Code Playgroud)

这是我的 (main.py) 使用 MicroPython 连接到 AWS IoT 的简单代码

import machine
from network import WLAN
import network
from umqtt.simple import MQTTClient

# AWS endpoint parameters.
HOST = b'HOST'    # ex: b'abcdefg1234567'
REGION = b'REGION'  # ex: b'us-east-1'

CLIENT_ID = "CLIENT_ID"  # Should be unique for each device connected.
AWS_ENDPOINT = b'%s.iot.%s.amazonaws.com' % (HOST, REGION)

keyfile = '/certs/private.pem.key'
with open(keyfile, 'r') as f:
    key = f.read() …
Run Code Online (Sandbox Code Playgroud)

mqtt micropython aws-iot esp32

5
推荐指数
1
解决办法
2094
查看次数

如何在micropython中清除oled显示

我正在使用 micro python 在 esp8266 上执行此操作,并且有一种方法可以在 Arduino 中清除 OLED 显示,但我不知道如何在 micropython 中清除显示,我使用ssd1306库来控制我的 OLED

这是我的错误,我编写了一个从列表循环在 OLED 上打印的代码,但 OLED 将其打印在之前打印的文本上(将一个打印在另一个不清晰的顶部并打印)7在此输入图像描述

display = [ip, request_uri, country, region, city]

for real_time in display:
  oled.text(real_time, 0, 20)
  oled.show()
  time.sleep(2)
  print(real_time)
Run Code Online (Sandbox Code Playgroud)

python esp8266 micropython

5
推荐指数
1
解决办法
3802
查看次数

如何在 ESP32 上的 MicroPython 中检索和格式化 wifi MAC 地址?

我在 ESP32 上运行以下 MicroPython 代码:

import network

wlan_sta = network.WLAN(network.STA_IF)
wlan_sta.active(True)

wlan_mac = wlan_sta.config('mac')
print("MAC Address:", wlan_mac)  # Show MAC for peering
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

MAC Address: b'0\xae\xa4z\xa7$'
Run Code Online (Sandbox Code Playgroud)

我想以更熟悉的六对十六进制数字的格式显示它,如下所示:

MAC Address: AABBCC112233
Run Code Online (Sandbox Code Playgroud)

在网上搜索解决方案后,我尝试过:

print("MAC Address:", str(wlan_mac))但它的显示与不使用 str() 时相同

print("MAC Address:", hex(wlan_mac))但它会导致 TypeError: can't conversion bytes to int

print("MAC Address:", wlan_mac.hex())但它说 AttributeError: 'bytes' 对象没有属性 'hex'

我也对从 检索到的字节有点怀疑wlan_sta.config('mac')。我本来希望看到一些看起来更像的东西,b'\xaa\xbb\xcc\x11\x22\x33'而不是b'0\xae\xa4z\xa7$'。z 和 $ 对于应该是十六进制的东西来说似乎非常不合适,并且对于应该是六对数字的东西来说似乎太短了。

所以我的问题有两个:

  1. 我是否使用了正确的方法来获取 MAC 地址?
  2. 如果正确,如何将其格式化为六对十六进制数字?

micropython esp32

5
推荐指数
1
解决办法
5683
查看次数

Mindstorms EV3 如何通过蓝牙与我的电脑通信?

我正在使用 microPython 2 对 EV3 进行编程。我有另一个 python 3 程序在笔记本电脑上运行,该程序应该以无线方式将数据发送到 EV3。可以通过蓝牙吗?如果不可能的话我该怎么做?

python bluetooth visual-studio-code micropython lego-mindstorms-ev3

4
推荐指数
1
解决办法
3453
查看次数