# Raspberry Pi pico
[參考來源](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#raspberry-pi-pico)
## 軟體
* [Thonny](https://thonny.org/)(使用micropython)
* 支援更新pico韌體
* [Arduino Lab for micropython](https://labs.arduino.cc/en/labs/micropython) (使用micropython)
* [Viusual Studio Code](https://code.visualstudio.com/)
* [Arduino IDE](https://www.arduino.cc/en/software) (使用C)
## 硬體
* pico
* [Download Fritzing Part for Raspberry Pi Pico](https://datasheets.raspberrypi.com/pico/Pico-R3-Fritzing.fzpz)
* [Download the Pinout Diagram ](https://datasheets.raspberrypi.com/pico/Pico-R3-A4-Pinout.pdf)
* pico w 
* [Download Fritzing Part for Rapsberry Pi Pico W](https://datasheets.raspberrypi.com/picow/PicoW-Fritzing.fzpz)
* [Download the Pinout Diagram (PDF)](https://datasheets.raspberrypi.com/picow/PicoW-A4-Pinout.pdf)
* Resetting Flash memory(重置)
* [下載重置用檔案UF2](https://datasheets.raspberrypi.com/soft/flash_nuke.uf2)
* 按住BOOTSEL按鈕後,再插入micro usb線,即可啟動為Mass Storage模式,將上述UF2檔案拖曳進該儲存空間後,pico即自動重置
## Micropython([https://micropython.org/](https://micropython.org/))
* [micro python for rpi pico語法](https://docs.micropython.org/en/latest/rp2/quickref.html)
* 恢復支援micropython,下載下列檔案後,如上述按住BOOTSEL按鈕後,再插入micro usb線,即啟動Mass Storage模式,再將下列韌體拖曳進去後即可
* [rp2-pico micropython firmware](https://micropython.org/download/rp2-pico/)
* [rp2-pico w micropython firmware](https://micropython.org/download/rp2-pico-w/)
# 第一次使用rpi-pico
接上usb時,預設為Mass Storage模式

---
# **Micro python**
# 使用Thonny編輯:
使用右下角更新韌體或連線rpi pico w



# Blink
## 使用內建LED(WL_GPIO0) [參考來源3.4節](https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf)
```
import machine
import time
led=machine.Pin("LED",machine.Pin.OUT) #使用板子上內建的LED(WL_GPIO0)
while True:
led.off()
time.sleep(1)
led.on()
time.sleep(1)
```
## 使用arduino IDE

## 使用GPIO14,外接LED
```
from machine import Pin
import time
led=Pin(14,Pin.OUT) #使用gpio 14
while True:
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
```
## PWM(使用GPIO14)
```
import time
from machine import Pin, PWM
pwm=PWM(Pin(14)) #建立pwm於GPIO14
pwm.freq(1000) #設定pwm頻率
duty=0
direction=1
for _ in range(8 *256): #fade in fade out 4次 ; _ in range為不使用變數寫法,如同 for i in range(8*256),這裡需設定一變數i
duty+=direction
if duty >255:
duty=255
direction=-1
elif duty < 0:
duty=0
direction=1
pwm.duty_u16(duty * duty)
time.sleep(0.001) # fade速度
```
## 連接WiFi [參考來源1](https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf) [參考來源2](https://docs.micropython.org/en/latest/library/network.WLAN.html)
```
import network
import time
ssid='DAP3690-24' # Wifi SSID 名稱
password='' # Wifi 密碼
wlan=network.WLAN(network.STA_IF) #設定enable station interface and connect to WiFi access point
wlan.active(True)
wlan.connect(ssid,password)
max_wait=10 # wait for connect or fail
while max_wait > 0 :
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('Wait for connection...')
time.sleep(1)
if wlan.status() !=3 : #Handle onnection error
raise RuntimeError('Network connect failed!')
else:
print('Connected!')
status=wlan.ifconfig()
print('IP Address=' + status[0])
print('Netmask=' + status[1])
print('Gateway=' + status[2])
print('DNS=' + status[3])
```
# **===========**
---
# **C/C++**
# 使用arduino IDE作為編輯器時:
* 設定環境
* 於Preferences Additional boards manager URL填https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json


1. 開啟arduino IDE 
2. 選擇開發版(這裡使用pico W) 
3. 選擇連接埠(第一次顯示UF2 Board) 
4. 按下upload 
5. 完成韌體變更後,即可看到com port出現,之後即可使用arduino IDE編撰。
6. 需要回復為micro python編譯環境,則再使用上面Restting flash memory方式,利用flash_nuke.uf2重置,再更新micro python韌體即可。
# pico連線WiFi(與ESP32-s寫法一樣)
```
#include <WiFi.h>
char ssid[] = " "; //wifi SSID
char passwd[] = " "; //wifi passwd
void setup()
{
Serial.begin(115200);
WifiConnecte(); //Wifi開始連線
}
void loop()
{
}
void WifiConnecte()
{
int connect_count=0; //宣告嘗試連線次數=0
WiFi.begin(ssid,passwd);
Serial.print("等待連線");
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".."); //等待連線中
delay(100);
if(connect_count++ >= 10)
{
watchdog_reboot(0,0,10); //如果嘗試連線次數累加至10次,則重新開機
}
}
Serial.println("Wifi連線成功");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
}
```
# 使用DHT11
DHT11資料pin接至gpio15
使用 dht sensor for Adafruit
```
#include "DHT.h"
#define DHTPIN 15 // 將DHT11 DATA連接的引腳
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("無法從DHT11感測器讀取數據!");
return;
}
Serial.print("溫度: ");
Serial.print(temperature);
Serial.print(" *C\t濕度: ");
Serial.print(humidity);
Serial.println(" %");
}
```