从Python以OUTPUT模式打开Arduino Pin

问题描述

TLDR:我想用Python驱动硬件,并认为我需要Arduino才能完成工作。原来我完全不需要Arduino就可以完成工作,因此下面的帖子绝对是胡说八道。


我希望与我的第一个Arduino Uno开发板接口,并希望使用Python来完成任务。我想知道是否有人可以帮助我将简单的Arduino / C转换为Python以完成任务。任何指针将不胜感激!

这是我正在查看的方块:

#include <Wire.h>

// control pin
int txden = 8;

// data prefix and suffix
byte data_prefix[] = {0x80,0x83,0xFF};
byte data_suffix[] = {0x8F};

// 28 bytes
byte all_dark[] = {
  B0000000,B0000000,};

byte word_to_display[] = {
  B0000000,B0101110,B0101010,B0111010,B0100010,B0111110,B0000010,B0010110,B0101000,B0000000
};

void setup() {
  Serial.begin(9600);  
  pinMode(txden,OUTPUT);
  digitalWrite(txden,HIGH);
  Serial.write(data_prefix,3);
  Serial.write(all_dark,28);
  Serial.write(data_suffix,1);
  delay(3000);
}

void loop() {
  Serial.write(data_prefix,3);
  Serial.write(word_to_display,1);
  delay(2000);  
}

Arduino IDE首先解释setup函数,然后像游戏引擎(例如Phaser)那样连续运行loop函数Serial.write通过串行端口将二进制数据向外发送到我的活动显示器,活动点解释该消息并做出相应的反应。

上面的循环显示在活动板上:

enter image description here

给我的印象是pyserial包可能允许我通过相同的引脚发送相同的字节。这是我所得到的:

import serial

# serial: https://pythonhosted.org/pyserial/pyserial.html#overview

# args: device,bauds,timeout -- baud timeout must be exact
arduino = serial.Serial('COM3',9600,timeout=.1)

data_prefix = bytearray([0x80,0xFF])

data_suffix = bytearray([0x8F])

all_dark = bytearray([
  0B0000000,0B0000000,])

word_to_display = bytearray([
  0B0000000,0B0101110,0B0101010,0B0111010,0B0100010,0B0111110,0B0000010,0B0010110,0B0101000,])

我需要弄清楚如何在OUTPUT模式下从Python打开Arduino上的8号针。排序后,我还需要弄清楚现在如何复制setuploop函数及其组成调用包括Serial.write()方法,该方法将二进制数据写入串行端口以用于活动装置进行解释。任何指针都将非常有帮助。

解决方法

我对pyserial软件包可能允许我发送 通过相同的引脚输入相同的字节。

pyserial使您可以通过串行接口发送数据。它与Arduino无关。如果您只需要将此串行数据显示在显示器上,则完全不需要Arduino。只需将串行线连接到显示器,然后直接从PC发送串行数据即可。

我还需要弄清楚如何复制设置和循环 功能

那很简单。首先编写要运行一次的代码,然后将要在无限循环中运行的代码放入无限循环中。 while(1)可以很好地创建无限循环。 Arduino上的设置或循环功能没有什么特别的。它们只是从主函数调用的常规函数​​。安装程序被调用一次,然后循环被无限循环调用。

现在还不清楚为什么您认为需要在这里使用Arduino。如果仅仅是因为您不知道如何将事物连接到PC,那么Raspberry Pi可能是一个更好的选择,因为它既可以运行python,又具有可以将事物连接到的GPIO引脚。第二种选择是在Arduino上加载firmata并使用python中的pyFirmata来控制它。您可以用谷歌搜索这两个词,有很多关于如何做到这一点的教程。

我认为您对Arduino的功能有一些基本的误解。花费一些时间从该项目中学习一些基础知识,然后在您对所有这些东西意味着什么有了一点了解和一点了解之后,再回到这一点,也许对您会有所帮助。

更大的问题是,为什么要涉及python?是否有需要通过PC控制的原因?还是只是不想学习一种新语言?这是两个截然不同的问题,它们会促使我给您不同的答复。如果您需要能够从PC控制显示,则只需执行此操作,稍后再将Arduino用于其他用途即可。