当前位置: 首页 > 知识库问答 >
问题:

MicroPython ESP8266 SPI接口发送错误数据

燕朝明
2023-03-14

一个非常基本的电路使用MicroPython和SPI接口将ESP8266 MCU连接到74HC595移位寄存器。这就是我尝试发送数据的方式:

from machine import Pin, SPI
hspi = SPI(-1, baudrate=50000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12), bits=8)
latch_pin = Pin(15, Pin.OUT)
latch_pin.off()

def send(s):
    hspi.write(s)
    latch_pin.on()
    latch_pin.off()

为了测试,我在输出引脚和5V(通过100欧姆电阻)之间放置了8个LED,以查看发生了什么,并尝试使用此测试功能发送数据:

import time
def test_one(s):
    send(chr(int(s)))
    time.sleep(0.5) # only to be able to examine the leds after data was sent

def test():
    [test_one(s) for s in [
        '0b00000000',
        '0b10000000',
        '0b01000000',
        '0b00100000',
        '0b00010000',
        '0b00001000',
        '0b00000100',
        '0b00000010',
        '0b00000001',
        '0b01111111',
        '0b10111111',
        '0b11011111',
        '0b11101111',
        '0b11110111',
        '0b11111011',
        '0b11111101',
        '0b11111110',
        '0b11111111']]

test()

正如您所看到的,在这个测试中有移动的1和移动的0。结果很有趣。值0000 0000被传输为1100 0010。之后,所有设置了一个位的值都被正确传输。那么0111 1111再次正确。在那之后,所有的值都是错误的。我已经用逻辑分析器检查了输出,看起来这些值是以两个字节而不是一个字节发送的。

第一个良好值为1000 0000:

具有单个1位0000 0001的最后一个值也被传输。

最后一个有效值是0111 1111:

下一个应该是1011 1111,而不是1100 0010 1011 1111。E、 g.发送的不是一个字节,而是两个字节:

我的第一个想法是,也许SPI使用的是7位而不是8位。但这是不可能的,因为在这种情况下,1000 0000也应该是错误的。(此外,SPI对象是使用bit=8参数创建的。)顺便说一句,我也尝试过硬件SPI(id=1),但也有同样的问题。所以这一定是我的程序有问题,而不是硬件,但我卡住了,无法解决这个问题。

send()函数使用chr()创建单个字符。有人能解释一下为什么有些单个字符作为两个字节发送,而另一些作为一个字节发送吗?

共有1个答案

宰父君昊
2023-03-14

MicroPython基于Python3。。。

MicroPython的目标是在语言语法方面实现Python3.4标准(具有从较新版本中选择的功能),MicroPythin的大多数功能与docs.Python.org上的“语言参考”文档中描述的功能相同。

...因此< code>chr返回一个Unicode字符串。要指定通过SPI发送的确切字节,您需要为SPI write方法提供一个< code>bytes对象。

如果将代码中的send(chr(int(s)))替换为send(bytes([int(s。

 类似资料:
  • 控制器(我忽略了导入) 下面是我在控制器中引用的相关html页面。您可以假设每一个服务和存储库都正常工作,并完成了它的工作。 这是确认页面。这里有点不对劲。插入到表单的隐藏输入框中的数据不会被提交: 扬尼克

  • 所以我有了这个spring集成项目。将网关用作触发批处理作业的触发器。我为网关制作了这个接口: 谢谢, 喷气机

  • 问题内容: 我正在尝试将JSON发送到elasticSearch。我尝试使用Postman和SOAPUI数据是 我回来了以下错误 但是当我发布单个JSON数组即 然后工作正常。我是ElasticSearch的新手,所以不确定出什么问题。 问题答案: 首先尝试使用大括号,然后为数组命名。尝试一下,看看是否可行。 例如: 可能有效,因为它包含在对象内部。 更好 在尝试时,我发现它可以将数组隐式转换为J

  • 在尝试发送存储在变量中的数据时,我遇到了一个问题。我希望变量是一个介于0和10之间的int,但我收到的是255或254作为值。请帮帮我 下面是我的代码:

  • 问题内容: 嗨,我在下面的脚本中遇到了问题。我认为问题在于需要通过AJAX发送到php的数据。 jQuery的 并且,PHP 但是,如果我这样做 并改变这个 脚本工作正常。我需要做些什么才能使以上两个脚本都能正常工作?提前致谢。 问题答案: 我将我的评论作为答案。 除了使用已弃用的jQuery API外,其他人没有指出的是以下内容: 您在下一行中正在做什么: 是您向服务器保证HTTP实体将是JSO

  • 我一直在用c做一些套接字编程,我想让我的程序的用户指定要从中发送和接收数据包的接口。套接字(7) 的 linux 手册页说, 你可以设置套接字选项SO_BINDTODEVICE将套接字绑定到一个特定的设备, 比如 “eth0”。我还想到,在调用 bind() 时,您通常会向它传递一个sockaddr_in结构,并将 sin_addr.s_addr 属性设置为 INADDR_ANY 以指示套接字绑定