2021年12月19日日曜日

raspico②(neopixel,lm61,bltin,lc1602,us, uart::espr or mic,oled)

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)も参考になった

0 件のコメント:

コメントを投稿