WS2812 Neopixel LED with Raspberry Pi Pico (theelectronics.co.in)
import array, time
from machine import Pin
import rp2
# Configure the number of WS2812 LEDs.
NUM_LEDS = 8
PIN_NUM = 6
brightness = 1
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
# Create the StateMachine with the ws2812 program, outputting on pin
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
##########################################################################
def pixels_show():
dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for i,c in enumerate(ar):
r = int(((c >> 8) & 0xFF) * brightness)
g = int(((c >> 16) & 0xFF) * brightness)
b = int((c & 0xFF) * brightness)
dimmer_ar[i] = (g<<16) + (r<<8) + b
sm.put(dimmer_ar, 8)
time.sleep_ms(10)
def pixels_set(i, color):
ar[i] = (color[1]<<16) + (color[0]<<8) + color[2]
def pixels_fill(color):
for i in range(len(ar)):
pixels_set(i, color)
def color_chase(color, wait):
for i in range(NUM_LEDS):
pixels_set(i, color)
time.sleep(wait)
pixels_show()
time.sleep(0.2)
def wheel(pos):
# Input a value 0 to 255 to get a color value.
# The colours are a transition r - g - b - back to r.
if pos < 0 or pos > 255:
return (0, 0, 0)
if pos < 85:
return (255 - pos * 3, pos * 3, 0)
if pos < 170:
pos -= 85
return (0, 255 - pos * 3, pos * 3)
pos -= 170
return (pos * 3, 0, 255 - pos * 3)
def rainbow_cycle(wait):
for j in range(255):
for i in range(NUM_LEDS):
rc_index = (i * 256 // NUM_LEDS) + j
pixels_set(i, wheel(rc_index & 255))
pixels_show()
time.sleep(wait)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)
while 1:
pixels_set(1,RED)
pixels_set(3,BLUE)
pixels_show()
time.sleep(0.2)
pixels_set(1,BLACK)
pixels_set(3,BLACK)
pixels_show()
time.sleep(0.2)
-------------------------------------------------------------------------------------
---------------------------------------------------------
LM61:: https://qiita.com/cakipy/items/0bc823ce909076344cb0 をもとに結線した
import machine
import utime
from machine import Pin
from micropython import const
from utime import sleep
sensor_temp = machine.ADC(2)
conversion_factor = 3.3 / (65535)
while True:
reading = sensor_temp.read_u16() * conversion_factor
temp_calc = (reading*1000-600) /10
print("{0:.1f}".format(temp_calc) + "C")
----------------------------------------------------------------------------------------
【Raspberry Pi Pico】温度センサーをMicroPythonで読み取る方法 | メタエレ実験室 (hellobreak.net) 表示装置がないのでピコに入れずにthonnyのプロッタ出力してみた
なお内蔵のLEDはPin25で制御できる
----------------------------------------------------------------------------
【Raspberry Pi Pico】I2C接続のLCDディスプレイを使う方法【MicroPython】 | メタエレ実験室 (hellobreak.net) まずI2Cの番号を以下のコードでしらべる
39だった(16進では0x27)
import machine
sda=machine.Pin(0)
scl=machine.Pin(1)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)
print(i2c.scan())
注:GitHub - dhylands/python_lcd: Python based library for talking to character based LCDs. からライブラリ2個をインストしてからmain.pyは以下
(インスト方法は https://www.youtube.com/watch?v=nek77AvP_pU を参照
まあ、そのライブラリを、その名でraspicoにセーブするだけでいいのだが。。。
なおyoutubeではレベルシフタもちいていたが、上記サイトでは使わず Vbus!)
import time
import machine
from esp8266_i2c_lcd import I2cLcd
I2C_ADDR = 0x27
sda = machine.Pin(0)
scl = machine.Pin(1)
# I2C start
i2c = machine.I2C(0,sda=sda, scl=scl, freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16) # 手持ちは4行だが2を4としてもだめだった)
lcd.putstr("It Works!\nSecond Line")
ーーーーーーーーーーーーーーーーーーーーー
【Raspberry Pi Pico】超音波センサーで距離を測定する方法 | メタエレ実験室 (hellobreak.net) で簡単に成功 1kΩを3個つかって分圧するのがミソ
---------from espr to pico -----------------------------------------------------------------
espr2のtx,rx(デフォルト)からボーを9600にして"hello"を1秒ごとに
serial.printlnするだけ 3v3はラズピコの3v3outを利用、gndの共通化はお約束
マイクロビットとESPr Developerでシリアル通信する | さとやまノート (msr-r.net) を参考
raspicoでは以下を参考にした 受信データは一行で送られるのでまとめるのがコツ
pico-micropython-examples/uart.py at master · raspberrypi/pico-micropython-examples · GitHub
from machine import UART,Pin
import time
u = UART(0,9600,tx=Pin(0),rx=Pin(1))
3rxData = bytes()
while True:
while u.any() > 0:
rxData += u.read(1)
print(rxData.decode('utf-8'))
time.sleep(0.3)
注:MicroPython的午睡(21) ラズパイPico、M5AtomLiteとUART通信 | デバイスビジネス開拓団 (jhalfmoon.com) を参考にu.readline()でもいけるかも。。。。
------------------------------from pico to espr --------------------------------------
at pico::
from machine import Pin, UART
import time
u=UART(0,9600,tx=Pin(0),rx=Pin(1))
for i in range(10):
u.write(b"abc\n")
time.sleep(1)
and at espr:: https://msr-r.net/serial-mb2esp/を参考に
#include <SoftwareSerial.h>
SoftwareSerial swSer(14, 12);
void setup() {
Serial.begin(115200);
swSer.begin(9600);
Serial.println("\nSoftware serial test started");
}
void loop() {
while (swSer.available() > 0) {
Serial.println(swSer.readStringUntil('\n'));
yield();
}
}
----------------------------------------------------------------------
micro:bitとの交信はUARTブログに書いている
結局、espr2とつながればwifi、micro:bitとつながればbluetoothができることになる
(その後、bluetooth moduleでもOKだった)
-------------------------------------------------------------------------------
【Raspberry Pi Pico】OLEDディスプレイ(I2C)に文字を描画する方法【MicroPython】 | メタエレ実験室 (hellobreak.net) 普通にできたRaspberry Pi Pico OLED Display (SSD1306) — Maker Portal (makersportal.com)も参考になった