精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何學(xué)習(xí)使用CircuitPython

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-28 17:27 ? 次閱讀

概述

有幾種編程微控制器的方法。有些方法比其他方法困難,這通常取決于人們對(duì)編程基礎(chǔ)的熟悉程度。

本指南主要供Arduino開發(fā)人員通過演示程序的使用來學(xué)習(xí)使用CircuitPython的來龍去脈。兩種語言的代碼。這可能是對(duì)人們熟悉CircuitPython技能的參考。

同樣有效的可能是從未使用過Arduino的Python或CircuitPython程序員。顯示Arduino用于各種用途的代碼可能有助于使自己更適應(yīng)Arduino環(huán)境。

來源:https://www.xkcd.com/303/(CC BY-NC 2.5)

解釋與編譯

Arduino從大量使用中的工具中獲取了很多東西數(shù)十年。這包括已編譯代碼的概念。代碼是在沒有調(diào)試的情況下在文本編輯器類型的環(huán)境中編寫的。然后,在被命令時(shí),將其饋送到一系列程序,這些程序?qū)@取代碼,最后將其從C或C ++編譯為微控制器的機(jī)器語言。在市場(chǎng)上有各種各樣的微控制器,機(jī)器代碼是該代碼和處理器所獨(dú)有的。

如果需要在Arduino中更改代碼,則必須編輯文本代碼并通過編譯過程將其提交回去。 。在每次發(fā)生的編譯和加載過程中,進(jìn)行更改,修復(fù)語法錯(cuò)誤,“插入”最佳值可能會(huì)花費(fèi)大量時(shí)間。

Python通常和CircuitPython特別是解釋的。直到必須將代碼轉(zhuǎn)換為機(jī)器代碼。這有很多優(yōu)點(diǎn)。該代碼可以在運(yùn)行時(shí)給出錯(cuò)誤消息。隨后的任何更改都不需要重新編譯。加載代碼就像將代碼文本文件復(fù)制到閃存驅(qū)動(dòng)器一樣簡(jiǎn)單。 CircuitPython程序開發(fā)通常只是Arduino程序所需時(shí)間的一小部分。該代碼對(duì)于其他微控制器也具有高度的可移植性。

解釋的代碼的缺點(diǎn)是速度。將代碼轉(zhuǎn)換為機(jī)器代碼是即時(shí)進(jìn)行的,因此需要時(shí)間。解釋器還使用微控制器上的RAM和Flash,而不是等效的Arduino用戶代碼和庫。

材料:MS Word 2010剪貼畫

Reality

現(xiàn)代微控制器的速度和存儲(chǔ)容量不斷提高,其價(jià)格通常與較舊的微控制器相似或更低(制造商可能希望在某個(gè)時(shí)候停產(chǎn))。在現(xiàn)代芯片中,在微控制器上使用Python不會(huì)帶來速度上的損失。 Python的靈活性以及在學(xué)校中教授的靈活性的優(yōu)勢(shì)使Python成為人們關(guān)注的焦點(diǎn)。

在這個(gè)時(shí)代,提供幫助將Arduino編碼器遷移到CircuitPython的工具似乎特別合適,因?yàn)檫@無疑是行業(yè)發(fā)展的方向

您可能會(huì)很慢,但仍然會(huì)贏。而且烏龜?shù)膲勖荛L。

計(jì)算機(jī)Python

Linux板呢?

Arduino代碼通常不能在Raspberry PiBeagleBone等小型Linux板上運(yùn)行。為什么?

Linux是一個(gè)完整的操作系統(tǒng),它可以一次運(yùn)行許多東西。 Arduino代碼必須學(xué)會(huì)共享資源,而不要使用整個(gè)處理器,尤其是在無限循環(huán)中。也許有一天會(huì)添加此功能,但現(xiàn)在不可用。

Python在Linux板上非常流行。 CircuitPython可以通過Adafruit提供的名為Blinka的幫助程序?qū)釉谛⌒蚅inux板上運(yùn)行。這提供了CircuitPython在微控制器上可以做什么以及如何在Linux上運(yùn)行之間所需的映射。它們旨在共同發(fā)揮作用(只要您的代碼也寫得很好。

因此,對(duì)于基于Linux的小型單板計(jì)算機(jī),CircuitPython是目前的唯一選擇。但這是一個(gè)不錯(cuò)的選擇。

在本指南中,我們將不介紹在Linux上通過CircuitPython使用硬件的詳細(xì)信息。在此處查看有關(guān)Blinka的指南

簡(jiǎn)單的代碼結(jié)構(gòu)

Arduino strong》

上圖顯示了最簡(jiǎn)單的Arduino程序,即從菜單中選擇文件-》 新建會(huì)得到的結(jié)果。有兩個(gè)強(qiáng)制性函數(shù)調(diào)用:

setup-程序啟動(dòng)時(shí)將執(zhí)行一次的代碼

loop-連續(xù)的代碼一遍又一遍地循環(huán)運(yùn)行

這兩個(gè)函數(shù)都不做任何事情。有些草圖僅在setup中執(zhí)行所有操作,而有些程序根本不使用setup而僅使用loop。但是,即使它們是空的(如上所示),也必須同時(shí)定義兩者。

CircuitPython

CircuitPython并沒有限制像Arduino setup函數(shù)這樣的開始執(zhí)行的代碼重復(fù)的主要代碼,例如Arduino loop函數(shù)。

也就是說,許多CircuitPython程序的結(jié)構(gòu)與Arduino素描程序的結(jié)構(gòu)非常相似。

一個(gè)簡(jiǎn)單的示例。程序?qū)⒆兞縱ar定義為值5,然后一遍又一遍地打印該值,類似于舊的BASIC Hello World程序。在Arduino中,您可以這樣編寫:

程序會(huì)添加一些代碼以打開串行連接并輸出輸出。

等效的CircuitPython程序?yàn)椋?/p>

任何setup類型語句放在程序頂部附近。

可以在Python中通過loop循環(huán)將條件設(shè)置為while,因此它永遠(yuǎn)不會(huì)退出True。

串行監(jiān)視器已“嵌入”到CircuitPython中,用戶無需設(shè)置任何內(nèi)容即可使用它,并且將對(duì)此進(jìn)行詳細(xì)討論。

沒有任何限制,CircuitPython完全必須執(zhí)行無限循環(huán)。一個(gè)簡(jiǎn)單的程序可以讀取溫度傳感器,打印輸出并結(jié)束。

但是,Arduino和CircuitPython都在微控制器上運(yùn)行。在課堂上,您可能想要做一次讀取和打印溫度值之類的操作。如果將這個(gè)項(xiàng)目部署到農(nóng)民的田地中,它可能會(huì)一遍又一遍地反復(fù)讀取溫度,可能每分鐘或一小時(shí)讀取一次。在農(nóng)民的田野里,代碼永遠(yuǎn)都不應(yīng)停止。

因此執(zhí)行某些功能的無限循環(huán)非常有用,并且在大多數(shù)微控制器程序中都使用。這就是Arduino為初學(xué)者簡(jiǎn)化事情的原因,以表明您可能想擁有while和setup。您可以在CircuitPython中執(zhí)行完全相同的操作,只需構(gòu)建代碼以提供相同的功能即可。

處理數(shù)字

照片Nick Hillier在Unsplash上發(fā)表的文章

您會(huì)認(rèn)為所有語言中的“數(shù)字就是數(shù)字”,但事實(shí)并非如此。所有數(shù)字在內(nèi)部都以二進(jìn)制形式在微控制器/計(jì)算機(jī)內(nèi)部表示,但是編程語言如何提供數(shù)字支持會(huì)因語言而異。

數(shù)字類型

整數(shù)

浮點(diǎn)數(shù)

布爾值(true/false)

通常,您需要了解 precision -選擇最佳的使用方式,數(shù)字的大小可能是多少它在計(jì)算機(jī)程序中。這使使用數(shù)字有些棘手,但學(xué)習(xí)起來卻很容易。

Arduino

在Arduino中,您具有以下類型的變量:

int 表示整數(shù),一個(gè)值沒有小數(shù)點(diǎn)。整數(shù)的典型范圍是-32,768到零到32,767。例如279、1001、0,-23,-990。

long 是一個(gè)大整數(shù),值可以是-2,147,483,648到2,147,483,647。

float (浮點(diǎn)數(shù))(浮點(diǎn)數(shù)(帶小數(shù)點(diǎn)和小數(shù)的數(shù)字))。例子是3.1415,-22.2、0.0、430000.01。單個(gè)字符的數(shù)字最大為38 x的3 x 10

char 。例如,讀取串行數(shù)據(jù)可能涉及在接收到數(shù)據(jù)時(shí)提供字符值的接收功能。字符基本上可以是鍵盤上的任何符號(hào)(0到255)。

types.h 庫提供了趨于表現(xiàn)的數(shù)字的更現(xiàn)代表示形式

函數(shù)經(jīng)常使用無符號(hào)短整數(shù) uint8_t ,它的范圍也從0到255。

布爾數(shù)學(xué)通常使用 int 值完成。 0是 false ,而任何非零的值(例如1)都是 true 。

Python/CircuitPython

CircuitPython嘗試盡可能接近標(biāo)準(zhǔn)的Python實(shí)現(xiàn)(通常稱為CPython) 。給定微控制器沒有操作系統(tǒng),某些事情會(huì)有所不同,但已記錄在案。

以下是CircuitPython中的當(dāng)前類型:

整數(shù),但不是當(dāng)前的長整數(shù)

浮點(diǎn)數(shù)。

字符串

布爾值

布爾值是CircuitPython中的實(shí)際類型,可以是值 True 或 False 。

CircuitPython具有專用的 Strings 類型,而不是像Arduino那樣使用字符數(shù)組(以零/零終止)。請(qǐng)注意,CircuitPython 字符串不是以零/零結(jié)尾的,所以使用length屬性是您處理字符串長度的方法。

更改數(shù)字類型

在Arduino/C中,這稱為轉(zhuǎn)換。

下載:文件

復(fù)制代碼

int a;

float b;

b = (float)a;

a = (int)b; int a;

float b;

b = (float)a;

a = (int)b;

在CircuitPython中,您使用類似于函數(shù)的語法:

下載:文件

復(fù)制代碼

x = 5

y = 3.14

z = float(x)

z = int(y) x = 5

y = 3.14

z = float(x)

z = int(y)

除法,一個(gè)斜杠對(duì)兩個(gè)斜杠

兩種語言中的單個(gè)正斜杠/是浮點(diǎn)除法。

Python中的雙斜杠//很特殊。它將除以小數(shù)點(diǎn)后的任何值(通常稱為下限函數(shù))并進(jìn)行除法。

示例:

下載:文件

復(fù)制代碼

# Python code for / and // operators

x = 15

y = 4

# Output: x / y = 3.75

print(‘x / y =’, x/y)

# Output: x // y = 3

print(‘x // y =’, x//y) # Python code for / and // operators

x = 15

y = 4

# Output: x / y = 3.75

print(‘x / y =’, x/y)

# Output: x // y = 3

print(‘x // y =’, x//y)

邏輯運(yùn)算符

邏輯運(yùn)算符主要用于if語句和其他塊/循環(huán)語句中。這些不是用于按位運(yùn)算符和/或/或僅用于構(gòu)造邏輯比較的運(yùn)算符。

AND

OR

不是

Arduino/C

&&

||

!Python/CircuitPython

不是

下載:文件

復(fù)制代碼

// Arduino / C Logical Operators

a = 5;

b = 7;

if( a 》 2 && b 《 10) {

Serial.println(“Success”);

} // Arduino / C Logical Operators

a = 5;

b = 7;

if( a 》 2 && b 《 10) {

Serial.println(“Success”);

}

下載:文件

復(fù)制代碼

# CircuitPython Logical Operators

a = 5

b = 7

if a 》 2 and b 《 10:

print(“Success”) # CircuitPython Logical Operators

a = 5

b = 7

if a 》 2 and b 《 10:

print(“Success”)

變量,類型,范圍

從Wikipedia中,沒有列出創(chuàng)建者

快速參考

變量

Arduino

int a;

int b = 5;

CircuitPython

b = 5

陣列

Arduino

int a[5];

int a = {1, 2, 3, 4, 5};

CircuitPython

a = [1, 2, 3, 4, 5]

討論

變量

變量就像計(jì)算機(jī)內(nèi)存中的小盒子或信箱,可以在其中保留值。

要在C/C ++中創(chuàng)建變量,必須對(duì)其進(jìn)行聲明。這就需要給它一個(gè)類型,名稱和可選的值。

下載:文件

復(fù)制代碼

int a;

int b = 5; int a;

int b = 5;

在CircuitPython中,您無需聲明變量。第一次分配值時(shí)便會(huì)分配它們。

下載:文件

復(fù)制代碼

b = 5 b = 5

您只需使用名稱即可在兩種語言中使用變量的值。

下載:文件

復(fù)制代碼

int x = a_number; // in C/C++

x = a_number # in CircuitPython int x = a_number; // in C/C++

x = a_number # in CircuitPython

在兩種語言中,使用未知變量都是錯(cuò)誤的:尚未聲明(在C/C ++中)或未初始化(在CircuitPython中)

在C/C ++中,變量使用類型聲明,并被靜態(tài)類型化。它們僅具有該類型的值。

相反,CircuitPython是動(dòng)態(tài)類型的。變量沒有關(guān)聯(lián)的類型,并且可以在不同時(shí)間具有不同類型的值。每種方法都有優(yōu)點(diǎn)和缺點(diǎn),但是在閱讀某人的CircuitPython代碼時(shí),您應(yīng)該記住這一點(diǎn),以防某人重復(fù)使用變量并更改其類型。

集合

兩種語言都可以創(chuàng)建和操作值的集合。

“終極”-比其他任何集合都要好。只是不要單擊它。

(來自維基百科的圖像,已獲得合理使用許可)

Arduino

Arduino只有一種創(chuàng)建集合作為語言一部分的方法:數(shù)組。由于語言是C ++,因此您可以使用大多數(shù)C ++庫。具有足夠的CPU性能和內(nèi)存,您甚至可以將Arduino版本的標(biāo)準(zhǔn)C ++和Boost庫及其集合類一起使用,但是出于討論的目的,我們假設(shè)您使用的是基本語言功能。 p》

數(shù)組是簡(jiǎn)單的固定大小,固定順序的值序列。 C數(shù)組中的所有值都具有相同的類型。實(shí)際上,由于C是靜態(tài)類型的,所以數(shù)組項(xiàng)的類型是數(shù)組本身類型的一部分。

例如,如果要?jiǎng)?chuàng)建一個(gè)可以容納5個(gè)變量int中的值,您可以將其聲明為:

下載:文件

復(fù)制代碼

a int a[5];

如果在編譯時(shí)已知初始值,則可以初始化數(shù)組創(chuàng)建時(shí),并忽略其大小,因?yàn)閷某跏贾档臄?shù)量中推斷出大小。

下載:文件

復(fù)制代碼

int a[5]; int a[] = {1, 2, 3, 4, 5};

要訪問數(shù)組中的特定項(xiàng)目,請(qǐng)使用下標(biāo)符號(hào)。可以用來從數(shù)組中獲取值,或?qū)⑵湓O(shè)置為新值。

下載:文件

復(fù)制代碼

int a[] = {1, 2, 3, 4, 5}; int x = a[0];

a[1] = x + 1;

CircuitPython 》

基本的CircuitPython集合是List,其外觀和工作方式與C的數(shù)組非常相似。但是,它是一個(gè)動(dòng)態(tài)得多的結(jié)構(gòu):您可以自由地刪除和插入項(xiàng)目。它的長度是其中當(dāng)前有多少個(gè)項(xiàng)目的函數(shù),而不是它要保留的內(nèi)容的函數(shù)。由于它們是動(dòng)態(tài)的,因此通常不需要提前分配它們。您可以通過將項(xiàng)目放在方括號(hào)中來創(chuàng)建列表。

下載:文件

復(fù)制代碼

int x = a[0];

a[1] = x + 1; 》》》 a = [1, 2, 3, 4, 5]

與C數(shù)組一樣,您使用下標(biāo)符號(hào)來訪問項(xiàng)目。

下載:文件

復(fù)制代碼

》》》 a = [1, 2, 3, 4, 5] x = a[0]

a[1] = x + 1

CircuitPython的列表提供了比C數(shù)組更多的功能,但這超出了本指南的范圍。 CircuitPython還具有其他內(nèi)置集合:元組和字典。請(qǐng)參閱本指南,了解有關(guān)Python的基本數(shù)據(jù)結(jié)構(gòu),以及該指南的更多內(nèi)容,重點(diǎn)是列表和流。

Arduino/C和Python都在0處開始元素/數(shù)組組。因此對(duì)于3元素項(xiàng),它是x [0],x [1],x [2],這與某些語言(例如FORTRAN)在數(shù)組處開始元素1。

范圍

來自Elborgo用戶的維基百科

變量的作用域是代碼中何時(shí)何地可用。 C/C ++和CircuitPython都在詞法范圍內(nèi)。這意味著變量的范圍由代碼的結(jié)構(gòu)定義。如果您在函數(shù)中創(chuàng)建變量,則該變量在該函數(shù)中可用,但不在外部。

下載:文件

復(fù)制代碼

x = a[0]

a[1] = x + 1 void f() {

int a = 5;

print(a); // 1

}

print(a); // 2

由于void f() {

int a = 5;

print(a); // 1

}

print(a); // 2為范圍。即它在函數(shù)a中定義,可以使用。但是,第2行會(huì)導(dǎo)致編譯錯(cuò)誤,因?yàn)榇藭r(shí)名稱f尚不清楚。在CircuitPython中,情況類似:

下載:文件

復(fù)制代碼

a def f():

a = 5

print(a) # 1

print(a) # 2

Local and Global

上面的代碼說明了本地狀態(tài)。即局部于功能。這就是為什么從函數(shù)外部引用變量是一個(gè)問題。另一個(gè)范圍是全局范圍。在整個(gè)代碼中都可以使用具有全局范圍的內(nèi)容。

下載:文件

復(fù)制代碼

def f():

a = 5

print(a) # 1

print(a) # 2 int b = 1;

void f() {

int a = 5;

print(a + b);

}

print(b);

// prints:

// 6

// 1

這是可行的,因?yàn)閕nt b = 1;

void f() {

int a = 5;

print(a + b);

}

print(b);

// prints:

// 6

// 1具有全局作用域,因此可以在。在CircuitPython中也是如此。

下載:文件

復(fù)制代碼

b f

如果我們具有相同名稱但在兩個(gè)作用域中都有變量,該怎么辦。現(xiàn)在事情開始不同了。在C/C ++中沒有麻煩。

Download:file

Copy代碼

b = 1

def f():

a = 5

print(a + b)

print(b)

# prints:

# 6

# 1 b = 1

def f():

a = 5

print(a + b)

print(b)

# prints:

# 6

# 1

但是,CircuitPython中的工作方式卻大不相同。

下載:文件

復(fù)制代碼

int a = 1;

void f() {

int a = 5;

print(a);

}

print(a);

// prints:

// 5

// 1 int a = 1;

void f() {

int a = 5;

print(a);

}

print(a);

// prints:

// 5

// 1

a = 1

def f():

a = 5 # 1

print(a)

print(a)

# prints:

# 5

# 1的分配可能存在問題。這是因?yàn)樵诒镜刈饔糜蛑袥]有名為“ a”的變量,因此將創(chuàng)建一個(gè)變量,因?yàn)檫@是該作用域中對(duì)a = 1

def f():

a = 5 # 1

print(a)

print(a)

# prints:

# 5

# 1的第一個(gè)賦值。對(duì)于該功能的其余部分,將使用此局部變量a,并且將保持不變(且未使用)全局范圍內(nèi)的變量a。

如果這正是您想要的,很好。但是,您的意圖可能是將全局a的值更改為5。如果是這種情況,那么您就有問題了。像pylint這樣的工具將提醒您以下事實(shí):外部范圍(在本例中為全局范圍)的名稱“ a”正在重新定義。那至少會(huì)引起您的注意。如果確實(shí)要使用全局a,則可以使用a語句告訴CircuitPython這是您的意圖。

下載:文件

復(fù)制代碼

a global

現(xiàn)在pylint可能會(huì)警告您,您正在使用全局語句。這是因?yàn)槿肿兞客ǔ2槐唤邮堋5怯靡粋€(gè)簡(jiǎn)單的腳本就可以了(在作者看來)。在更大,結(jié)構(gòu)更強(qiáng)的程序中,它們使用較少,您有辦法避免使用它們。

CircuitPython和C/C ++不能共享的一項(xiàng)有趣功能是能夠關(guān)閉。

數(shù)字輸入/輸出

格雷厄姆·詹金斯(Grahame Jenkins)提供的UnSplash免費(fèi)許可證

微控制程序的一部分正在使用I/O。 I/O的最基本形式是數(shù)字I/O引腳。這些被稱為GPIO引腳( G 通用 P 設(shè)置 I 輸入 O utput)

快速參考 配置輸出引腳

Arduino

pinMode(13, OUTPUT);

CircuitPython

import digitalio

import board

led = digitalio.DigitalInOut(board.D13)

led.direction = digitalio.Direction.OUTPUT

為輸入引腳配置而不上拉

Arduino

pinMode(13, INPUT);

CircuitPython

import digitalio

import board

button_a = digitalio.DigitalInOut(board.BUTTON_A)

button_a.direction = digitalio.Direction.INPUT

配置帶有上拉的輸入引腳

Arduino

pinMode(13, INPUT_PULLUP);

CircuitPython

import digitalio

import board

button_a = digitalio.DigitalInOut(board.BUTTON_A)

button_a.direction = digitalio.Direction.INPUT

button_a.pull = digitalio.Pull.UP

從引腳讀取

Arduino

int pinValue = digitalRead(inputPin);

CircuitPython

pinValue = button_a.value

寫到別針

Arduino

digitalWrite(13, HIGH);

digitalWrite(13, LOW);

CircuitPython

led.value = True

led.value = False

討論

配置數(shù)字I/O引腳

在使用引腳進(jìn)行輸入或輸出之前,必須對(duì)其進(jìn)行配置。這涉及將其設(shè)置為輸入或輸出,以及在需要時(shí)附加上拉或下拉。

Arduino

Arduino框架提供了pinMode為此。它帶有兩個(gè)參數(shù)

正在配置的引腳號(hào)。您以后可以使用相同的引腳號(hào)來使用I/O線

模式:INPUT,OUTPUT或INPUT_PULLUP。

要將標(biāo)準(zhǔn)的插針13板載LED設(shè)置為可用,您將使用:

下載:文件

復(fù)制代碼

pinMode(13, OUTPUT); pinMode(13, OUTPUT);

CircuitPython

在CircuitPython中,還有很多工作要做。您需要?jiǎng)?chuàng)建一個(gè)DigitalInOut實(shí)例。為此,您必須首先導(dǎo)入digitalio模塊。像在Arduino示例中一樣,給它提供要使用的引腳號(hào)。

在上面的Arduino示例中,我們?nèi)绾沃酪褂玫囊_號(hào)?簡(jiǎn)短的答案是我們剛剛做了。在此示例中,一個(gè)約定是板載LED位于引腳13上。對(duì)于其他GPIO引腳,您需要檢查所使用的板,以查看可用的引腳以及將電路連接到的引腳。

在Arduino中,沒有編譯時(shí)檢查您選擇的引腳是否有效或存在。 CircuitPython只允許您使用板子知道的管腳,這可以防止您輸入錯(cuò)誤。

(如果您導(dǎo)入板子模塊(稍后再介紹),您可以使用它列出可用的管腳。 )

下載:文件

復(fù)制代碼

》》》 import digitalio

》》》 import board

》》》 led = digitalio.DigitalInOut(board.D13)

》》》 led.direction = digitalio.Direction.OUTPUT 》》》 import digitalio

》》》 import board

》》》 led = digitalio.DigitalInOut(board.D13)

》》》 led.direction = digitalio.Direction.OUTPUT

如果需要輸入,可以使用digitalio.Direction.INPUT,如果需要設(shè)置上拉,則可以單獨(dú)進(jìn)行。

下載:文件

復(fù)制代碼

》》》 import digitalio

》》》 import board

》》》 button_a = digitalio.DigitalInOut(board.BUTTON_A)

》》》 button_a.direction = digitalio.Direction.INPUT

》》》 button_a.pull = digitalio.Pull.UP 》》》 import digitalio

》》》 import board

》》》 button_a = digitalio.DigitalInOut(board.BUTTON_A)

》》》 button_a.direction = digitalio.Direction.INPUT

》》》 button_a.pull = digitalio.Pull.UP

CircuitPython運(yùn)行的SAMD板還支持在輸入引腳上設(shè)置下拉。為此,您將使用

下載:文件

復(fù)制代碼

》》》 pin.pull = digitalio.Pull.DOWN 》》》 pin.pull = digitalio.Pull.DOWN

使用數(shù)字I/O引腳

現(xiàn)在您已經(jīng)設(shè)置了引腳,如何讀取和寫入值?

Arduino

該框架提供了digitalRead函數(shù),該函數(shù)以引腳號(hào)作為參數(shù)。

下載:文件

復(fù)制代碼

int pinValue = digitalRead(inputPin); int pinValue = digitalRead(inputPin);

從digitalRead返回的值是int類型,將是常量HIGH或LOW之一。

digitalWrite功能用于設(shè)置引腳值。它的參數(shù)是引腳號(hào)和將其設(shè)置為的值:HIGH或LOW。例如,假設(shè)已如上所述將其設(shè)置為輸出,則打開連接到引腳13的LED,您可以使用:

下載:文件

復(fù)制代碼

digitalWrite(13, HIGH); digitalWrite(13, HIGH);

并關(guān)閉它:

下載:文件

復(fù)制代碼

digitalWrite(13, LOW); digitalWrite(13, LOW);

此處的示例顯示了如何使用數(shù)字輸出引腳來閃爍內(nèi)置的LED:微控制器編程的事實(shí)上的 Hello World 。

下載:文件

復(fù)制代碼

void setup()

{

pinMode(13, OUTPUT); // sets the digital pin 13 as output

}

void loop()

{

digitalWrite(13, HIGH); // sets the digital pin 13 on

delay(1000); // waits for a second

digitalWrite(13, LOW); // sets the digital pin 13 off

delay(1000); // waits for a second

}

void setup()

{

pinMode(13, OUTPUT); // sets the digital pin 13 as output

}

void loop()

{

digitalWrite(13, HIGH); // sets the digital pin 13 on

delay(1000); // waits for a second

digitalWrite(13, LOW); // sets the digital pin 13 off

delay(1000); // waits for a second

}

將數(shù)字輸入和輸出放在一起,下面是一個(gè)示例,該示例從開關(guān)讀取并控制LED作為響應(yīng)。

下載:文件

復(fù)制代碼

int ledPin = 13; // LED connected to digital pin 13

int inPin = 7; // pushbutton connected to digital pin 7

int val = 0; // variable to store the read value

void setup()

{

pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output

pinMode(inPin, INPUT); // sets the digital pin 7 as input

}

void loop()

{

val = digitalRead(inPin); // read the input pin

digitalWrite(ledPin, val); // sets the LED to the button‘s value

} int ledPin = 13; // LED connected to digital pin 13

int inPin = 7; // pushbutton connected to digital pin 7

int val = 0; // variable to store the read value

void setup()

{

pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output

pinMode(inPin, INPUT); // sets the digital pin 7 as input

}

void loop()

{

val = digitalRead(inPin); // read the input pin

digitalWrite(ledPin, val); // sets the LED to the button’s value

}

CircuitPython

假設(shè)led和switch的設(shè)置如上所述。

輸入引腳可以通過查詢其value屬性進(jìn)行讀取:

下載:文件

復(fù)制代碼

》》》 button_a.value 》》》 button_a.value

我們可以通過設(shè)置value屬性來打開和關(guān)閉led = 1》反對(duì)一個(gè)布爾值:

下載:文件

復(fù)制代碼

DigitalInOut 》》》 led.value = True

》》》 led.value = False

要在CircuitPython中實(shí)現(xiàn)閃爍的演示,我們將做一些類似的事情:

下載:文件

復(fù)制代碼

》》》 led.value = True

》》》 led.value = False 》》》 import time

》》》 import digitalio

》》》 import board

》》》 led = digitalio.DigitalInOut(board.D13)

》》》 led.direction = digitalio.Direction.OUTPUT

》》》 while True:

。.. led.value = True

。.. time.sleep(0.5)

。.. led.value = False

。.. time.sleep(0.5)

模擬輸入

快速參考

配置模擬輸入引腳

Arduino

不需要

CircuitPython

import board

import analogio

adc = analogio.AnalogIn(board.A0)

使用模擬輸入引腳

Arduino

int val = analogRead(3);

CircuitPython

adc.value

討論

配置模擬輸入引腳

Arduino

配置模擬輸入引腳不需要任何特殊操作。需要以與數(shù)字輸出引腳相同的方式將模擬輸出引腳配置為輸出。請(qǐng)注意,僅某些引腳可以用作模擬引腳。查看特定電路板的文檔以查找哪些電路板。

CircuitPython

在CircuitPython中使用模擬引腳類似于

像以前一樣,使用board模塊可以按名稱訪問正確的引腳。另外,analogio模塊為您提供模擬I/O類。

要讀取模擬輸入,您需要?jiǎng)?chuàng)建AnalogIn的實(shí)例:

下載:文件

復(fù)制代碼

》》》 import board

》》》 import analogio

》》》 adc = analogio.AnalogIn(board.A0) 》》》 import board

》》》 import analogio

》》》 adc = analogio.AnalogIn(board.A0)

要設(shè)置模擬輸出,請(qǐng)創(chuàng)建一個(gè)AnalogOut實(shí)例。

下載:文件

復(fù)制代碼

》》》 import board

》》》 import analogio

》》》 led = analogio.AnalogOut(board.A0) 》》》 import board

》》》 import analogio

》》》 led = analogio.AnalogOut(board.A0)

使用模擬輸入引腳

Arduino

模擬I/O與數(shù)字類似。不同的板可以具有不同數(shù)量和位置的模擬引腳。查看您的文檔以獲取有關(guān)主板功能的詳細(xì)信息。

下載:文件

復(fù)制代碼

int val = analogRead(3); int val = analogRead(3);

返回的值是一個(gè)介于0和1023之間(包括0和1023)的int。該范圍假設(shè)一個(gè)10位模數(shù)轉(zhuǎn)換器。通常,模數(shù)轉(zhuǎn)換器中的位數(shù)決定范圍,范圍是0到2 bits -1。例如。一個(gè)12位轉(zhuǎn)換器將得出0到4095之間的值。請(qǐng)參考您開發(fā)板的文檔以找到轉(zhuǎn)換器的大小。

CircuitPython

具有上面所示的AnalogIn對(duì)象后,只需獲取其value屬性:

下載:文件

復(fù)制代碼

adc.value adc.value

在CircuitPython中,模擬如上所示,您輸入的輸入值將始終在0到65535之間。這并不意味著總會(huì)有一個(gè)16位轉(zhuǎn)換器。相反,將從轉(zhuǎn)換器讀取的值映射到16位范圍。這使您不必?fù)?dān)心板上的轉(zhuǎn)換器的詳細(xì)信息。

AnalogIn對(duì)象為您提供了一種方便的方法來查詢轉(zhuǎn)換器的參考電壓,因此如果您需要了解要測(cè)量實(shí)際電壓,只需使用以下代碼即可。請(qǐng)記住,其結(jié)果將根據(jù)引腳上的電壓以及參考電壓而有所不同。

下載:文件

復(fù)制代碼

》》》 adc.value / 65535 * adc.reference_voltage

3.2998 》》》 adc.value / 65535 * adc.reference_voltage

3.2998

模擬和PWM輸出

快速參考

配置模擬輸出引腳

Arduino

大多數(shù)開發(fā)板沒有真正的模擬輸出。

CircuitPython

import board

import analogio

dac = analogio.AnalogOut(board.A1)

使用模擬輸出引腳

Arduino

大多數(shù)板子都沒有真正的模擬輸出。

CircuitPython

dac.value = 32767

PWM輸出引腳

Arduino

不需要

CircuitPython

import board

import pulseio

led = pulseio.PWMOut(board.A1)

使用PWM輸出引腳

Arduino

analogWrite(9, 128);

CircuitPython

led.duty_cycle = 32767

討論 Arduino

直接寫入模擬引腳。從技術(shù)上講,這通常不是真正的模擬值,而是PWM信號(hào)。即您正在寫入的值將設(shè)置PWM信號(hào)的占空比。范圍是0-255(含)。 analogWrite用于此目的,和digitalWrite一樣,用于獲取引腳和值。

Arduino DUE具有2個(gè)實(shí)際的模數(shù)轉(zhuǎn)換器,可輸出實(shí)際的模擬電壓,而不是輸出

下載:文件

復(fù)制代碼

analogWrite(pin, val);

analogWrite(pin, val);

將它們放在一起,我們可以從模擬引腳讀取并寫入另一個(gè)引腳。區(qū)別在于需要容納值范圍,這就是4的除法。

下載:文件

復(fù)制代碼

int ledPin = 9; // LED connected to digital pin 9

int analogPin = 3; // potentiometer connected to analog pin 3

int val = 0; // variable to store the read value

void setup()

{

pinMode(ledPin, OUTPUT); // sets the pin as output

}

void loop()

{

val = analogRead(analogPin); // read the input pin

analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255

} int ledPin = 9; // LED connected to digital pin 9

int analogPin = 3; // potentiometer connected to analog pin 3

int val = 0; // variable to store the read value

void setup()

{

pinMode(ledPin, OUTPUT); // sets the pin as output

}

void loop()

{

val = analogRead(analogPin); // read the input pin

analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255

}

CircuitPython

》 CircuitPython硬件上有兩種類型的模擬輸出:真實(shí)模擬和PWM(與Arduino一樣)。

對(duì)于真實(shí)模擬輸出,AnalogOut對(duì)象的value參數(shù)設(shè)置為a值介于0到65535之間,與AnalogInput的值范圍相同:0將輸出設(shè)置為0v,65535將其設(shè)置為參考電壓。

下載:文件

復(fù)制代碼

dac.value = 32767 dac.value = 32767

一個(gè)相關(guān)的輸出功能是PWM(脈沖寬度調(diào)制)。它以完全不同的方式完成。代替使用analogio模塊,您需要使用pulseio并使用要在其上生成信號(hào)的Pin創(chuàng)建一個(gè)PWMOut對(duì)象。

下載:文件

復(fù)制代碼

》》》 import board

》》》 import pulseio

》》》 led = pulseio.PWMOut(board.A1) 》》》 import board

》》》 import pulseio

》》》 led = pulseio.PWMOut(board.A1)

一個(gè)PWMOut對(duì)象,可以將其占空比(輸出為高的時(shí)間百分比)設(shè)置為16位整數(shù)(0-65535)。例如:

下載:文件

復(fù)制代碼

# set the output to 100% (always high)

》》》 led.duty_cycle = 65535

# set the output to 0% (always low)

》》》 led.duty_cycle = 0

# set the output to 50% (high half the time)

》》》 led.duty_cycle = 32767 # set the output to 100% (always high)

》》》 led.duty_cycle = 65535

# set the output to 0% (always low)

》》》 led.duty_cycle = 0

# set the output to 50% (high half the time)

》》》 led.duty_cycle = 32767

時(shí)間

蘇甘斯攝在Unsplash

快速參考

延遲

Arduino

delay(1500);

CircuitPython

import time

time.sleep(1.5)

系統(tǒng)時(shí)間

Arduino

unsigned long now = millis();

CircuitPython

import time

now = time.monotonic()

討論

能夠等待特定的時(shí)間時(shí)間在許多項(xiàng)目中都很重要。

Arduino和CircuitPython的處理方法非常相似。

延遲 Arduino

該函數(shù)用于等待特定時(shí)間, delay,已內(nèi)置在Arduino框架中。不需要#include。單個(gè)參數(shù)是延遲時(shí)間,以毫秒為單位。

一個(gè)示例是如下所示的簡(jiǎn)單閃爍LED代碼:

下載:文件

復(fù)制代碼

int ledPin = 13; // LED connected to digital pin 13

void setup()

{

pinMode(ledPin, OUTPUT); // sets the digital pin as output

}

void loop()

{

digitalWrite(ledPin, HIGH); // sets the LED on

delay(1000); // waits for a second

digitalWrite(ledPin, LOW); // sets the LED off

delay(1000); // waits for a second

} int ledPin = 13; // LED connected to digital pin 13

void setup()

{

pinMode(ledPin, OUTPUT); // sets the digital pin as output

}

void loop()

{

digitalWrite(ledPin, HIGH); // sets the LED on

delay(1000); // waits for a second

digitalWrite(ledPin, LOW); // sets the LED off

delay(1000); // waits for a second

}

每次打開或關(guān)閉delay以創(chuàng)建閃爍的燈光時(shí),ledPin函數(shù)都會(huì)等待一秒鐘(1000毫秒)。

CircuitPython

CircuitPython中與delay等效的函數(shù)是time.sleep函數(shù)。默認(rèn)情況下不包含time模塊,必須將其導(dǎo)入到程序中。

傳遞給time.sleep的參數(shù)是延遲時(shí)間(以秒為單位)。 》(不是毫秒)。該值可以是十進(jìn)制,因此如果要等待一秒鐘,請(qǐng)放入1.0,如果要等待50毫秒,則為0.050。

下面的代碼重復(fù)打印單詞Hello。打印件之間的間隔為0.1秒,即100毫秒。

下載:文件

復(fù)制代碼

import time

while True:

print(“Hello”)

time.sleep(0.1) import time

while True:

print(“Hello”)

time.sleep(0.1)

Djim Loic在Unsplash上拍攝的照片

獲取系統(tǒng)時(shí)間

通常,微控制器和單板計(jì)算機(jī)通常缺少實(shí)時(shí)時(shí)鐘(RTC)模塊來了解時(shí)間。每個(gè)系統(tǒng)通常具有的功能是對(duì)自打開電源以來的時(shí)間進(jìn)行計(jì)數(shù)。對(duì)于完成一段時(shí)間的某些工作而言,這仍然很有用。

Arduino

要獲取自Arduino開發(fā)板以來的時(shí)間,常用功能是millis。它沒有任何參數(shù),并返回自從上次打開該板電源以來的毫秒數(shù)。

以下代碼草圖顯示了每秒從串行端口上電以來的時(shí)間(1000毫秒)。

下載:文件

復(fù)制代碼

unsigned long initial;

void setup(){

Serial.begin(9600);

initial = millis();

}

void loop(){

unsigned long now;

now = millis();

if( now - initial 》 3 ) { // Print done after 3 milliseconds elapses

Serial.print(“done”);

}

else {

initial = now;

}

} unsigned long initial;

void setup(){

Serial.begin(9600);

initial = millis();

}

void loop(){

unsigned long now;

now = millis();

if( now - initial 》 3 ) { // Print done after 3 milliseconds elapses

Serial.print(“done”);

}

else {

initial = now;

}

}

CircuitPython

Python具有許多時(shí)間函數(shù)。但是許多板卡都遇到了與Arduino發(fā)現(xiàn)的相同的問題-沒有RTC。

CircuitPython具有與Arduino delay類似的功能,稱為time.monotonic。但是它返回的是秒,而不是像delay那樣的毫秒。

注意,不建議比較大于一小時(shí)的時(shí)間,因?yàn)樵撝祵㈤_始四舍五入,可能會(huì)浪費(fèi)時(shí)間,從而造成準(zhǔn)確性。

下載:文件

復(fù)制代碼

import time

initial = time.monotonic() # Time in seconds since power on

while True:

now = time.monotonic()

if now - initial 》 0.003: # If 3 milliseconds elapses

print(“done”)

else:

initial = now import time

initial = time.monotonic() # Time in seconds since power on

while True:

now = time.monotonic()

if now - initial 》 0.003: # If 3 milliseconds elapses

print(“done”)

else:

initial = now

參考 Arduino

Arduino參考

延遲

millis

CircuitPython

時(shí)間-與時(shí)間和計(jì)時(shí)相關(guān)的功能

庫和模塊

長愛爾蘭都柏林三一學(xué)院室內(nèi)。來自Wikipedia的用戶Diliff,CC BY-SA 4.0

快速參考

Arduino

include

CircuitPython

import time

討論

Arduino和CircuitPython都提供了一種從正在處理的文件外部提取代碼的方法。這可能是您編寫的另一個(gè)文件,是框架的一部分,或者是傳感器支持模塊。

Arduino

C和C ++將代碼分為代碼文件(分別以.c或.cpp結(jié)尾)和頭文件(以.h結(jié)尾)。 Arduino環(huán)境為您的草圖/程序的主文件收取了少量費(fèi)用。它以.ino結(jié)尾。

頭文件通常包含函數(shù)和全局變量聲明以及宏和類型定義。在C ++中,類定義也位于此處。代碼文件包含函數(shù)定義。頭文件提供了到庫的接口,告訴您的代碼如何訪問/調(diào)用庫的工具。

要使用頭文件(及其包含的庫)您包括它:

下載:文件

復(fù)制代碼

#include #include

現(xiàn)在,您的代碼可以使用string.h中定義的函數(shù)和類型,該函數(shù)和類型是字符串的集合操作功能,例如strcpy()用于復(fù)制字符串。

CircuitPython

所有CircuitPython代碼文件均具有.py擴(kuò)展名(結(jié)束)。沒有定義接口的單獨(dú)文件。

CircuitPython具有與Arduino/C相似的機(jī)制,稱為模塊。代碼創(chuàng)建者為特定目的收集了一組功能并創(chuàng)建了一個(gè)模塊。

預(yù)編譯的模塊具有.mpy文件擴(kuò)展名。并非所有模塊都必須預(yù)先編譯,這樣只會(huì)節(jié)省空間。

使用CircuitPython模塊,則應(yīng)將適當(dāng)?shù)奈募ㄍǔJ?mpy文件)放置在開發(fā)板閃存驅(qū)動(dòng)器上的/lib文件夾中。

“時(shí)間”頁面上的較早位置, time模塊已導(dǎo)入,并提供了兩個(gè)功能:time.sleep和time.monotonic。

請(qǐng)注意,當(dāng)您如上所述導(dǎo)入模塊時(shí),不能僅引用里面的東西,你必須給它們加上模塊名的前綴。即time.monotonic(),而不僅僅是monotonic()。有很多方法可以避免這種情況,但這超出了本指南的范圍。

下載:文件

復(fù)制代碼

import time

while True:

print(“Hello”)

time.sleep(0.1) import time

while True:

print(“Hello”)

time.sleep(0.1)

CircuitPython無法將完整的Python/CPython可用的大型模塊導(dǎo)入為微控制器上的內(nèi)存非常有限。

Adafruit致力于提供大量模塊來支持廣泛的硬件。這包括傳感器,顯示器,智能LED(NeoPixel等)等等。正如Adafruit是提供開源Arduino庫的領(lǐng)導(dǎo)者一樣,Adafruit也在Python世界中努力做到這一點(diǎn)。

Python模塊有更多功能,但以上內(nèi)容基礎(chǔ)。有關(guān)更多信息,請(qǐng)參見此類Python參考。

有關(guān)最新的CircuitPython模塊的信息,請(qǐng)參考Adafruit GitHub存儲(chǔ)庫。

董事會(huì)模塊

圖片作者:Unsplash上的rawpixel

您正在微控制器板上編寫嵌入式代碼。這幾乎總是意味著您正在通過董事會(huì)的一些圖釘與外界互動(dòng)。您如何知道哪些代碼在做什么,以及在代碼中使用哪些代碼?

Arduino

在編譯之前在Arduino IDE中,選擇要使用的板。這基本上告訴了編譯器信息,該信息需要專門針對(duì)MCU和該特定板的配置進(jìn)行編譯。但是,那無助于知道使用什么引腳。您必須查看電路板的文檔并弄清楚。 Arduino硬件平臺(tái)提供了一些有用的標(biāo)準(zhǔn)。您將始終有一些以“ D”為前綴的引腳。這些用于數(shù)字I/O。有些將以“ A”為前綴。這些可以用于模擬信號(hào),但并非全部都支持真實(shí)的模擬輸出。

將有I2C(SCL和SDA)和SPI(MOSI,MISO和SCK)引腳。在代碼中,您將使用適當(dāng)?shù)墓苣_編號(hào),盡管某些板具有在Arduino IDE中選擇板時(shí)可使用的那些管腳的預(yù)定義值。

CircuitPython

CircuitPython采用了非常不同的方法來處理各種受支持的電路板。首先,CircuitPython駐留在板上,而Arduino是計(jì)算機(jī)上的一組工具,該工具會(huì)生成一個(gè)二進(jìn)制文件,然后將其保存在板上。

進(jìn)行此項(xiàng)工作的一部分是制作以下版本的CircuitPython:特定于每個(gè)受支持的板。例如,如果您想將CircuitPython與Feather M4 Express一起使用,則可以得到CircuitPython的Feather M4 Express版本,并將其放到Feather M4 Express板上。有關(guān)詳細(xì)信息,請(qǐng)參見本指南。

之所以如此重要,是因?yàn)镃ircuitPython知道其運(yùn)行在哪個(gè)板上,并且知道該板上的功能,以及該板上的引腳是什么。以及他們可以做什么。

要使此功能可用,您可以導(dǎo)入board模塊。該模塊包含特定板上引腳的常數(shù)。 CircuitPython中用于另一塊板的board模塊將具有特定于該板的不同常量。知道,用戶不必告訴CircuitPython它在什么板上運(yùn)行。

所有這些使使用板模塊成為使用板引腳的最安全,最可靠的方法。它使您不必?fù)?dān)心板子引腳連接到哪個(gè)MCU引腳。對(duì)于圍繞ARM內(nèi)核構(gòu)建的更復(fù)雜的MCU(例如SAMD或nRF52系列MCU),這更是一個(gè)問題。

例如,可以將I2C信號(hào)連接到MCU有多種方式(我們將不介紹),但是使用板卡模塊,您可以輕松執(zhí)行以下操作:

下載:文件

復(fù)制代碼

import board

import busio

i2c = busio.I2C(board.SCL, board.SDA) import board

import busio

i2c = busio.I2C(board.SCL, board.SDA)

這將在CircuitPython中任何受支持的板上工作。/p》

那么您如何知道板上有哪些引腳可用?他們叫什么?您可以使用CircuitPython的dir函數(shù)。這是在Circuit Playground Express上:

下載:文件

復(fù)制代碼

》》》 import board

》》》 dir(board)

[‘A0’, ‘A1’, ‘A2’, ‘A3’, ‘A4’, ‘A5’, ‘A6’, ‘A7’, ‘A8’, ‘A9’,

ACCELEROMETER_INTERRUPT’, ‘ACCELEROMETER_SCL’,

‘ACCELEROMETER_SDA’, ‘BUTTON_A’, ‘BUTTON_B’, ‘D0’, ‘D1’,

‘D10’, ‘D12’, ‘D13’, ‘D2’, ‘D3’, ‘D4’, ‘D5’, ‘D6’, ‘D7’,

‘D8’, ‘D9’, ‘I2C’, ‘IR_PROXIMITY’, ‘IR_RX’, ‘IR_TX’, ‘LIGHT’,

‘MICROPHONE_CLOCK’, ‘MICROPHONE_DATA’, ‘MISO’, ‘MOSI’,

‘NEOPIXEL’, ‘REMOTEIN’, ‘REMOTEOUT’, ‘RX’, ‘SCK’, ‘SCL’,

‘SDA’, ‘SLIDE_SWITCH’, ‘SPEAKER’, ‘SPEAKER_ENABLE’, ‘SPI’,

‘TEMPERATURE’, ‘TX’, ‘UART’]

》》》 》》》 import board

》》》 dir(board)

[‘A0’, ‘A1’, ‘A2’, ‘A3’, ‘A4’, ‘A5’, ‘A6’, ‘A7’, ‘A8’, ‘A9’,

‘ACCELEROMETER_INTERRUPT’, ‘ACCELEROMETER_SCL’,

‘ACCELEROMETER_SDA’, ‘BUTTON_A’, ‘BUTTON_B’, ‘D0’, ‘D1’,

‘D10’, ‘D12’, ‘D13’, ‘D2’, ‘D3’, ‘D4’, ‘D5’, ‘D6’, ‘D7’,

‘D8’, ‘D9’, ‘I2C’, ‘IR_PROXIMITY’, ‘IR_RX’, ‘IR_TX’, ‘LIGHT’,

‘MICROPHONE_CLOCK’, ‘MICROPHONE_DATA’, ‘MISO’, ‘MOSI’,

‘NEOPIXEL’, ‘REMOTEIN’, ‘REMOTEOUT’, ‘RX’, ‘SCK’, ‘SCL’,

‘SDA’, ‘SLIDE_SWITCH’, ‘SPEAKER’, ‘SPEAKER_ENABLE’, ‘SPI’,

‘TEMPERATURE’, ‘TX’, ‘UART’]

》》》

這是在Gemma M0上:

下載:文件

復(fù)制代碼

》》》 import board

》》》 dir(board)

[‘A0’, ‘A1’, ‘A2’, ‘APA102_MOSI’, ‘APA102_SCK’, ‘D0’,

‘D1’, ‘D13’, ‘D2’, ‘I2C’, ‘L’, ‘RX’, ‘SCL’, ‘SDA’, ‘SPI’,

‘TX’, ‘UART’]

》》》 import board

》》》 dir(board)

[‘A0’, ‘A1’, ‘A2’, ‘APA102_MOSI’, ‘APA102_SCK’, ‘D0’,

‘D1’, ‘D13’, ‘D2’, ‘I2C’, ‘L’, ‘RX’, ‘SCL’, ‘SDA’, ‘SPI’,

‘TX’, ‘UART’]

您可以看到有一些共同的引腳,但也有特定于主板的引腳。
責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3596

    瀏覽量

    93610
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6464

    瀏覽量

    186681
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是機(jī)器學(xué)習(xí)?通過機(jī)器學(xué)習(xí)方法能解決哪些問題?

    來源:Master編程樹“機(jī)器學(xué)習(xí)”最初的研究動(dòng)機(jī)是讓計(jì)算機(jī)系統(tǒng)具有人的學(xué)習(xí)能力以便實(shí)現(xiàn)人工智能。因?yàn)闆]有學(xué)習(xí)能力的系統(tǒng)很難被認(rèn)為是具有智能的。目前被廣泛采用的機(jī)器學(xué)習(xí)的定義是“利用經(jīng)
    的頭像 發(fā)表于 11-16 01:07 ?259次閱讀
    什么是機(jī)器<b class='flag-5'>學(xué)習(xí)</b>?通過機(jī)器<b class='flag-5'>學(xué)習(xí)</b>方法能解決哪些問題?

    NPU在深度學(xué)習(xí)中的應(yīng)用

    隨著人工智能技術(shù)的飛速發(fā)展,深度學(xué)習(xí)作為其核心驅(qū)動(dòng)力之一,已經(jīng)在眾多領(lǐng)域展現(xiàn)出了巨大的潛力和價(jià)值。NPU(Neural Processing Unit,神經(jīng)網(wǎng)絡(luò)處理單元)是專門為深度學(xué)習(xí)
    的頭像 發(fā)表于 11-14 15:17 ?336次閱讀

    如何使用 PyTorch 進(jìn)行強(qiáng)化學(xué)習(xí)

    強(qiáng)化學(xué)習(xí)(Reinforcement Learning, RL)是一種機(jī)器學(xué)習(xí)方法,它通過與環(huán)境的交互來學(xué)習(xí)如何做出決策,以最大化累積獎(jiǎng)勵(lì)。PyTorch 是一個(gè)流行的開源機(jī)器學(xué)習(xí)庫,
    的頭像 發(fā)表于 11-05 17:34 ?231次閱讀

    GPU深度學(xué)習(xí)應(yīng)用案例

    GPU在深度學(xué)習(xí)中的應(yīng)用廣泛且重要,以下是一些GPU深度學(xué)習(xí)應(yīng)用案例: 一、圖像識(shí)別 圖像識(shí)別是深度學(xué)習(xí)的核心應(yīng)用領(lǐng)域之一,GPU在加速圖像識(shí)別模型訓(xùn)練方面發(fā)揮著關(guān)鍵作用。通過利用GPU的并行計(jì)算
    的頭像 發(fā)表于 10-27 11:13 ?335次閱讀

    人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)存在什么區(qū)別

    人工智能指的是在某種程度上顯示出類似人類智能的設(shè)備。AI有很多技術(shù),但其中一個(gè)很大的子集是機(jī)器學(xué)習(xí)——讓算法從數(shù)據(jù)中學(xué)習(xí)
    發(fā)表于 10-24 17:22 ?2459次閱讀
    人工智能、機(jī)器<b class='flag-5'>學(xué)習(xí)</b>和深度<b class='flag-5'>學(xué)習(xí)</b>存在什么區(qū)別

    AI大模型與深度學(xué)習(xí)的關(guān)系

    AI大模型與深度學(xué)習(xí)之間存在著密不可分的關(guān)系,它們互為促進(jìn),相輔相成。以下是對(duì)兩者關(guān)系的介紹: 一、深度學(xué)習(xí)是AI大模型的基礎(chǔ) 技術(shù)支撐 :深度學(xué)習(xí)是一種機(jī)器學(xué)習(xí)的方法,通過多層神經(jīng)網(wǎng)
    的頭像 發(fā)表于 10-23 15:25 ?388次閱讀

    【核桃派ZeroW開發(fā)板體驗(yàn)連載】小小氣象站 03 aht10、bmp280測(cè)試

    前言 感謝核桃派和電子發(fā)燒友論壇提供的這次機(jī)會(huì)讓我有機(jī)會(huì)體驗(yàn)核桃派(WalnutPi)ZeroW這款linux開發(fā)板,希望可以借這個(gè)機(jī)會(huì)好好學(xué)習(xí)一下。 遠(yuǎn)程python 前面的配置基本完成,最后
    發(fā)表于 08-10 10:04

    【xG24 Matter開發(fā)套件試用體驗(yàn)】物聯(lián)網(wǎng)密碼柜之驅(qū)動(dòng)矩陣鍵盤和OLED顯示器

    +circuitpython進(jìn)行開發(fā),矩陣鍵盤驅(qū)動(dòng)為自行編寫,Oled驅(qū)動(dòng)基于Adafruit SSD_1306庫。 到本階段為止已實(shí)現(xiàn)的功能: 矩陣鍵盤的輸入與識(shí)別 密碼校驗(yàn) 邊緣檢測(cè)及錯(cuò)誤處理 SSD1306顯示器的驅(qū)動(dòng)
    發(fā)表于 08-04 23:04

    深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法綜述

    深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)重要分支,近年來在多個(gè)領(lǐng)域取得了顯著的成果,特別是在圖像識(shí)別、語音識(shí)別、自然語言處理等領(lǐng)域。然而,深度學(xué)習(xí)模型的強(qiáng)大性能往往依賴于大量有標(biāo)簽的數(shù)據(jù)進(jìn)行訓(xùn)練,這在實(shí)際
    的頭像 發(fā)表于 07-09 10:50 ?541次閱讀

    深度學(xué)習(xí)與nlp的區(qū)別在哪

    深度學(xué)習(xí)和自然語言處理(NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域中兩個(gè)非常重要的研究方向。它們之間既有聯(lián)系,也有區(qū)別。本文將介紹深度學(xué)習(xí)與NLP的區(qū)別。 深度學(xué)習(xí)簡(jiǎn)介 深度學(xué)習(xí)是一種基于人工神經(jīng)網(wǎng)絡(luò)的
    的頭像 發(fā)表于 07-05 09:47 ?825次閱讀

    人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)是什么

    在科技日新月異的今天,人工智能(Artificial Intelligence, AI)、機(jī)器學(xué)習(xí)(Machine Learning, ML)和深度學(xué)習(xí)(Deep Learning, DL)已成為
    的頭像 發(fā)表于 07-03 18:22 ?1126次閱讀

    深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)的對(duì)比

    在人工智能的浪潮中,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)無疑是兩大核心驅(qū)動(dòng)力。它們各自以其獨(dú)特的方式推動(dòng)著技術(shù)的進(jìn)步,為眾多領(lǐng)域帶來了革命性的變化。然而,盡管它們都屬于機(jī)器學(xué)習(xí)的范疇,但深度學(xué)習(xí)和傳統(tǒng)機(jī)
    的頭像 發(fā)表于 07-01 11:40 ?1202次閱讀

    深度學(xué)習(xí)與度量學(xué)習(xí)融合的綜述

    如今,機(jī)器學(xué)習(xí)的應(yīng)用廣泛,包括人臉識(shí)別、醫(yī)療診斷等,為復(fù)雜問題和大量數(shù)據(jù)提供解決方案。機(jī)器學(xué)習(xí)算法能基于數(shù)據(jù)產(chǎn)生成功的分類模型,但每個(gè)數(shù)據(jù)都有其問題,需定義區(qū)別特征進(jìn)行正確分類。
    發(fā)表于 04-24 09:49 ?393次閱讀
    深度<b class='flag-5'>學(xué)習(xí)</b>與度量<b class='flag-5'>學(xué)習(xí)</b>融合的綜述

    為什么深度學(xué)習(xí)的效果更好?

    導(dǎo)讀深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)子集,已成為人工智能領(lǐng)域的一項(xiàng)變革性技術(shù),在從計(jì)算機(jī)視覺、自然語言處理到自動(dòng)駕駛汽車等廣泛的應(yīng)用中取得了顯著的成功。深度學(xué)習(xí)的有效性并非偶然,而是植根于幾個(gè)基本原則和進(jìn)步
    的頭像 發(fā)表于 03-09 08:26 ?596次閱讀
    為什么深度<b class='flag-5'>學(xué)習(xí)</b>的效果更好?

    什么是深度學(xué)習(xí)?機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的主要差異

    2016年AlphaGo 擊敗韓國圍棋冠軍李世石,在媒體報(bào)道中,曾多次提及“深度學(xué)習(xí)”這個(gè)概念。
    的頭像 發(fā)表于 01-15 10:31 ?1027次閱讀
    什么是深度<b class='flag-5'>學(xué)習(xí)</b>?機(jī)器<b class='flag-5'>學(xué)習(xí)</b>和深度<b class='flag-5'>學(xué)習(xí)</b>的主要差異