(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)

前言

开发环境: LattePanda(拿铁熊猫)开发板, arduino, windows10
开发语言: python3.7,

首先说一下思路,这里的控制思路是通过对mcu中烧录 Firmata协议的控制代码(同官方),然后再通过python的 pymata模块根据firmata协议对mcu进行信息发送达成mpc与mcu的信息交互, 从而达到控制 gpio 13口, 由于13口的状态对应着下图开发板上亮着的那个蓝色的指示灯,所以我们对13口进行上拉下拉操作可以使得其进行闪烁.
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第1张图片

资料索引

更详细,原理说明,参考这篇博文,和以下资料
传送门
firmata协议测试客户端: 传送门
firmata的github官方说明
firmata对应arduino使用源码
python的firmata模块调用firmata源码

参考链接1
参考链接2
参考链接3

LattePanda.Firmata是 LattePanda 提供的开源 Firmata 库,适用于在 Visual Studio 中开发的 Windows 应用程序。此类允许您从 Windows 应用程序控制 Arduino GPIO,其功能包括:

读取和写入数字引脚
读取模拟输入
控制伺服电机
通过 I2C 总线向设备发送数据和从设备接收数据 传送门

管脚说明

(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第2张图片
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第3张图片

区域 U1 中的引脚分配给 X-Z8300 内核。

U2 区的引脚分配给 ATmega32u4 内核。区域 U2 中的 20 个数字引脚(A0 - A5、D0 - D13)中的每一个都可以用作输入或输出,每个引脚的工作电压为 5 伏。每个引脚可以输出或接收 40 mA 电流,并且每个引脚都有一个 20-50k 欧姆的内部上拉电阻(默认断开)。 注意:任何 I/O 引脚上的电流超过 40mA 可能会对 ATmega32u4 造成永久性损坏。
一些引脚具有专门的功能:

模拟输入: A0 - A5、A6 - A11(在 D4、D6、D8、D9、D10 和 D12 上)。LattePanda 有 12 个模拟输入,标记为 A0 到 A11,所有这些都可以用作数字 I/O(输入/输出)。每个引脚具有 10 位分辨率(即 1024 个不同的值)。默认情况下,它们的电压从地面测量到 5 伏。
串行: D0 (RX) 和 D1 (TX)。用于接收(RX)和发送(TX)TTL串行数据。
外部中断: D3(中断0)、D2(中断1)、D0(中断2)、D1(中断3)和D7(中断4)。这些引脚可配置为在测量低值、上升沿或下降沿或值变化时触发中断。
PWM: D3、D5、D6、D9、D10 和 D13 提供 8 位 PWM 输出。
SPI: D16 (MOSI)、D14 (味噌)、D15 (SCK)。
LED: D13 有一个由数字引脚 13 驱动的内置 LED。
TWI: D2(SDA)、D3(SCL)。板上的其他引脚:
复位:使LOW 线复位微控制器。通常用于向屏蔽添加重置按钮,该按钮可以阻止 SBC 上的功能。

拿铁熊猫上ide推荐
由于 pycharm之类的安装到 拿铁熊猫上太大了,这里使用的 thonny
并配置anaconda 环境如下图
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第4张图片

正文

1.根据自己的拿铁熊猫版本

选择物理编程,安步骤配置环境

我这里的是 lattePanda V1.0
注意按照物理编程的说明,记得让windows处于开发者模式,然后根据手册所说将代码通过 arduino 上传进 mcu 中
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第5张图片

2.在拿铁熊猫的python环境中,安装fyFirmata 以及 PyMata 库

传送门
其实就在python环境下pip install 安装就行了(使用anaconda的同学,记得对于自己创建的环境使用, conda activate 你创建的环境名称 在cmd中进行切换),总之你要保证thonny的python解释器和你配置的python环境一致.
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第6张图片

**

3.最后配置好Thonny的python解释器环境,然后使用以下代码验证

**(代码来自参考链接里面)

#!/usr/bin/env python3
import time
import sys
import signal
 
from PyMata.pymata import PyMata
 
# Digital pin 13 is connected to an LED. If you are running this script with
# an Arduino UNO no LED is needed (Pin 13 is connected to an internal LED).
BOARD_LED = 13
 
# Create a PyMata instance
board = PyMata("COM5", verbose=True)
 
def signal_handler(sig, frame):
    print('You pressed Ctrl+C')
    if board is not None:
        board.reset()
    sys.exit(0)
 
signal.signal(signal.SIGINT, signal_handler)
 
# Set digital pin 13 to be an output port
board.set_pin_mode(BOARD_LED, board.OUTPUT, board.DIGITAL)
 
time.sleep(2)
print("Blinking LED on pin 13 for 10 times ...")
 
# Blink for 10 times
for x in range(10):
    print(x + 1)
    # Set the output to 1 = High
    board.digital_write(BOARD_LED, 1)
    # Wait a half second between toggles.
    time.sleep(.5)
    # Set the output to 0 = Low
    board.digital_write(BOARD_LED, 0)
    time.sleep(.5)
 
# Close PyMata when we are done
board.close()

读数据例子

#!/usr/bin/env python3
import time
import sys
import signal

from PyMata.pymata import PyMata

# Digital pin 13 is connected to an LED. If you are running this script with
# an Arduino UNO no LED is needed (Pin 13 is connected to an internal LED).
BOARD_LED0 = 0
BOARD_LED1 = 1
# Create a PyMata instance
board = PyMata("COM3", verbose=True)


def signal_handler(sig, frame):
    print('You pressed Ctrl+C')
    if board is not None:
        board.reset()
    sys.exit(0)


signal.signal(signal.SIGINT, signal_handler)

# board.set_pin_mode(BOARD_LED0, board.OUTPUT, board.DIGITAL)
board.set_pin_mode(BOARD_LED0, board.INPUT, board.DIGITAL)
board.set_pin_mode(BOARD_LED1, board.INPUT, board.DIGITAL)


time.sleep(2)
i = 0
limit_num = input("输入脉冲数: ")
limit_num = eval(limit_num)
a1 = 0
while True:
    a = board.digital_read(BOARD_LED0)
    b = board.digital_read(BOARD_LED1)
    print("零号:" + str(a))
    print("一号:" + str(b))
    if a>b:
        print("正向")
    else:
        print("反向")

    if a != a1:
        a1 = a
        i = i + 1

    if i <= limit_num:
        i = 0
        limit_num = input("输入脉冲数: ")
        limit_num = eval(limit_num)




# Close PyMata when we are done
board.close()

然后不出错的话就可以看到.拿铁熊猫上面的灯按照0.5s闪烁10次了
如下图
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第7张图片
(LattePanda)拿铁熊猫python 简单控制led闪烁(使用python 进行硬件开发)_第8张图片

你可能感兴趣的:(python硬件开发,python,单片机,arduino,window,硬件工程)