## RPi Pi Pico W 101
[mirek](https://bletvaska.github.io)
/ [**Namakaný webinár**](http://www.namakanyden.sk)
notes:
* https://projects.raspberrypi.org/en/projects/get-started-pico-w/0
## Vlastnosti RP2040
* mikrokontrolér RP2040
* Dual-Core Arm Cortex-M0+ @ 133MHz
* 264kB pamäť SRAM, 2MB flash pamäť
![Infineon Logo](images/logo-infineon.png)
[CYW43439](https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/wi-fi-4-802.11n/cyw43439/)
(jednopásmové **WiFi** 4 (802.11n) + **Bluetooth®** 5.2)
[![](images/citron.base.board.jpg)](https://rpishop.cz/pico-karty/3854-cytron-maker-pi-pico-base-deska-pro-pi-pico-pro-zacatecniky.html)
![](images/etl.png)
note:
* https://www.fivetran.com/learn/data-pipeline-vs-etl
```
[ extract_data ] --> [ transform_data ] --> [ load_data ]
```
## Pico Projekt
0. príprava prostredia
1. pripojenie k WiFi
2. stiahnutie aktuálneho počasia zo služby [openweathermap.org](https://openweathermap.org/) cez HTTP
3. odoslanie údajov do [Adafruit IO](https://io.adafruit.com/) cez HTTP
4. odoslanie údajov do [Adafruit IO](https://io.adafruit.com/) cez MQTT
* stiahnutie knižnice
5. pravidelné spúšťanie
* cez nekonečnú slučku
* uspatím
## 1. Príprava prostredia
[![McroPython](images/logo-micropython.png)](https://micropython.org/)
[![Thonny](images/logo-thonny.png)](https://thonny.org/)
notes:
* inštalácia prostredia Thonny
### MicroPython -> Pico
[![](images/flashing.micropython.gif)](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html)
notes:
* inštalácia MicroPython-u
* stlačenie `Bootsel` tlačidla na doske
* inštalácia cez tlačidlo vpravo dole
* nebáť sa nainštalovať nočné zostavenie
* Hello, world!
```python
def do_connect(ssid, password):
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print(f'>> Connecting to network "{ssid}"...')
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('>> Network config:', wlan.ifconfig())
```
zdroj: [docs.micropython.org](https://docs.micropython.org/en/latest/esp32/quickref.html#wlan)
## 3. Stiahnutie aktuálneho počasia
```python
import requests
def extract_data(query: str, units: str, appid: str) -> dict:
url = (
'https://api.openweathermap.org/data/2.5/weather?'
f'q={query}&units={units}&appid={appid}'
)
response = requests.get(url)
data = response.json()
response.close()
return data
```
[![Adafruit IO](images/logo-adafruitio.png)](https://io.adafruit.com/)
Cloudová služba pre projekty Internetu vecí
notes:
* https://io.adafruit.com/api/docs/#adafruit-io-http-api
* ukážka rozhrania
* predstaviť koncept `Feeds` a `Groups`
* vytvoriť skupinu `weather` a feed-y pre teplotu, vlhkosť a tlak
* ukázať _Feed Info_ s tým, že nás bude zaujímať linka na API:
`https://io.adafruit.com/api/v2/bletvaska/feeds/weather.humidity`
## 4. Odoslanie údajov do [Adafruit IO](https://io.adafruit.com/) cez protokol HTTP
### Odoslanie metriky cez protokol HTTP
```bash
$ http post \
https://io.adafruit.com/api/v2/{user}/feeds/{group}.{feed}/data \
X-AIO-Key:{aio_key} \
datum:='{
"lat": 48.6667,
"lon": 21.3333,
"value": 6.86,
"created_at": "2024-10-1T20:36:22Z"
}'
```
### Odoslanie údajov cez HTTP
```python
def load_data(aio_username: str, aio_key: str, group: str, data: dict):
headers = {'X-AIO-Key': aio_key}
for feed in data['metrics']:
url = f'https://io.adafruit.com/api/v2/{aio_username}/feeds/{group}.{feed}/data'
payload = {
'value': data['metrics'][feed],
'lat': data['lat'],
'lon': data['lon'],
'created_at': data['dt']
}
response = requests.post(url, headers=headers, json=payload)
response.close()
```
## 5. Odoslanie údajov do [Adafruit IO](https://io.adafruit.com/) cez protokol MQTT
## [`pipkin`](https://github.com/aivarannamaa/pipkin)
nástroj na inštaláciu balíkov pre [MicroPython](https://micropython.org/) a [CircuitPython](https://circuitpython.org/)
(podpora v editore [Thonny](https://thonny.org/))
notes:
* instalovat modul `umqtt.simple`
* ak nepojde, tak rucne:
```python
import mip
mip.install('umqtt.simple')
```
### Odoslanie metriky cez protokol MQTT
```bash
$ mosquitto_pub -h io.adafruit.com -u {user} -P {key} \
-t {user}/feeds/{group}.{feed} \
-m '{
"lat": 48.6667,
"lon": 21.3333,
"value": 6.86,
"created_at": "2024-10-1T20:36:22Z"
}'
```
### Odoslanie skupiny metrík cez protokol MQTT
```bash
$ mosquitto_pub -h io.adafruit.com -u {user} -P {key} \
-t {user}/groups/{group} \
-m '{
"feeds": {
"pressure": 1016,
"humidity": 94,
"temp": 7.54
},
"location": {
"lat": 48.6667,
"lon": 21.3333
}
}'
```
### Odoslanie údajov cez [MQTT](https://github.com/micropython/micropython-lib/tree/master/micropython/umqtt.simple)
```python
from umqtt.simple import MQTTClient
def load_data_mqtt(aio_username: str, aio_key: str, group: str, data: dict):
topic = f'{aio_username}/groups/{group}'
payload = {
"feeds": {
"temp": data['metrics']['temp'],
"humidity": data['metrics']['humidity'],
"pressure": data['metrics']['pressure'],
},
"location": {
'lat': data['lat'],
'lon': data['lon'],
}
}
client = MQTTClient(unique_id(), 'io.adafruit.com', 1883, aio_username, aio_key)
client.connect()
client.publish(topic, json.dumps(payload))
client.disconnect()
```
## 6. Pravidelné spúšťanie
### ...v nekonečnej slučke
```python
if __name__ == '__main__':
while True:
main()
print(f'>> going to sleep for {INTERVAL} minuts')
time.sleep(INTERVAL * 60)
```
### ...hlbokým uspaním
```python
if __name__ == '__main__':
main()
print(f'>> going to sleep for {INTERVAL} minutes')
machine.deepsleep(INTERVAL * 60 * 1000)
```
### Bonus: Dekorátor osvietenia
```python
from machine import Pin
def enlight(func):
def wrapper(*args, **kwargs):
led = Pin('LED', Pin.OUT)
led.on()
func(*args, **kwargs)
led.off()
return wrapper
```
## Odkazy
* výsledný projekt: [`main.py`](src/main.py), [`boot.py`](src/boot.py)
* Namakaný webinár #10: [Začíname s Raspberry Pi Pico](http://namakanyden.sk/webinars/2021.05-rpi.pico.html)
* [Raspberry Pi Pico W: your $6 IoT platform](https://www.raspberrypi.com/news/raspberry-pi-pico-w-your-6-iot-platform/)
* [Raspberry Pi Pico and Pico W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html)
* YouTube: [A journey with Raspberry Pi Pico beginner to Advance Level](https://www.youtube.com/playlist?app=desktop&list=PLOYsAys6a6mk6Aq24_7ZbBE7rsiWtzqB4)
* [Get Started with MicroPython on Raspberry Pi Pico - 2nd Edition](https://store.rpipress.cc/products/get-started-with-micropython-on-raspberry-pi-pico-2nd-edition)
## Kde kúpiť?
* [RPishop.cz](https://rpishop.cz/raspberry-pi-pico/5074-raspberry-pi-pico-wh.html) - 8.04 Eur
* [RLX.sk](https://rlx.sk/sk/raspberry-pi-pico-rp2040/8944-raspberry-pi-pico-w-pico-rp2040-incl-header-wireless-lan-and-bluetooth-52-cyw43439.html) - 13.10 Eur
notes:
* https://www.hackster.io/news/raspberry-pi-unveils-the-pico-2-powered-by-the-dual-architecture-quad-core-rp2350-605253ab1235
![qr code](https://api.qrserver.com/v1/create-qr-code/?data=https://bit.ly/3Y5Xv3j&size=300x300)
(**https://bit.ly/3Y5Xv3j**)