2023의 게시물 표시

Raspberry Pi Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (4) ws2812 test 및 WIFI 시간 테스트

이미지
Raspberry  Pi  Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (4) 이전 포스트  라즈베리파이 피코의 프로그래밍을 위해 thonny로 연결 후 led blink 까지 테스트 진행 했다. 이번엔 ws2812 LED Matrix 를 켜보고 시간 표기를 해주고, WIFI 로 시간 서버에서 시간을 받아와 보자. 1. ws2812 LED Matrix 연결 알리에서 구매한  요녀석을 연결 해보자.  후면에 5V , GND , DIN 이 있어. 그곳에 전원 라인(5V, GND) 를 따로 뽑아 주고, DIN과 GND 를 또 뽑아서 PICO 에 연결해 줬다. 내가 연결 해준곳은 GP22 번에 연결 해줬는데 바로 옆에 GND 가 있어서 그곳으로 연결했다. wiring 은 이게 전부.. 참 간편하다. 일단 테스트용이니 5V 와 GND 를 파워 서플라이에 물려주고, 라즈베리 전원은 PC에서 USB 포트로 입력시켰다. 저렇게 전원이 다르면 GND에 전위차가 생겨 동작을 안할수 있으니, GND는 전원이 다르다면 절연 용이 아닌이상 묶어주는게 마음 편하다. 참고로 ws2812는 보통 PWM DMA를 사용해 주기를 이용해 한 비트의 펄스 길이를 만들어 주고 펄스 폭을 조정해 한 비트가 HIGH/LOW 인지 만들어 준다. 특정 LED 를 키기 위해 특정 데이터만 보내는것이 아니라, 내가 킬 LED 앞에 연결되 있는 모든 LED 데이터를 보내줘야 한다. 그래서 보통 LED 갯수만큼의 배열을 만들고 한개의 led만 킨다고 해도 모든 LED 데이터를 일괄로 보낸다. 2. MICRO PYTHON - neopixel module 사용. micropython의 문서를 보면 neopixel module이 포함되어 있다. 간단히 import neopixel 이면 끝난다. 하드웨어 설정을 단 2줄로 끝낼수 있으니, 얼마나 편한가. 속도를 신경 쓰지 않는 프로젝트라면 간편하게 micropython 을 사용하자. import neopixel ...

Raspberry Pi Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (3) 라즈베리파이 셋팅

이미지
Raspberry  Pi  Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (3) 이전 포스트  에선 구상후 SKETCHUP 을 이용해서 3D 외형을 만들고 3D PRINTER로 출력 하려고 하던중... 열선이 이상해서 결국 열선을 알리로 주문해놓은 상태이고, 라즈베리파이 피코 W 의 프로그램을 먼저 테스트 하면서 진행해 봐야겠다. 1. 환경 구축하기 일단 언어를 무엇으로 쓸지를 정해야 한다. C/C++ 또는 MICROPYTHON 이냐 인데... 환경 구축이 일단 개발 속도나 간편함으로 보면 MICROPYTHON 으로 하는게 훨씬 유리해 보인다. 원래는 C/C++ SDK 이용해서 하려고 했으나, 귀차니즘으로 인해 그냥 MICROPYTHON 으로 진행 하려고 한다. MICROPYTHON 설치는 인터넷에 많으니 보면 되고, 예전에 T-PICOC3 할때도 설치 했었다. (  PICO-POST  )  일단 MICRO 5PIN CABLE을 PC to RP PICO W  로 연결하면 저장매체로 인식하고 USB 처럼 새로운 드라이브로 잡힌다. MICRO PYTHON 으로 쓰기 위해선 공홈에서 UF2 파일을 받아서 PICO 에 올려줘야 한다. 라즈베리파이 피코 W 마이크로 파이선 UF2 경로  여기에서  난 WIFI AND BLE 파일로 다운 받아서 사용한다. BLUETOOTH 는 사용하지 않지만 혹시 나중에 쓸수도 있으니, 둘다 되는 녀석으로 다운로드후 업로드를 했다. 업로드는 그냥 다운로드 받은 파일을 아까 잡힌 저장매체에 옮기기만 하면 된다. 옮긴 다음부터는 저장매체로 안잡힘. 만약에 다시 저장매체로 만들고 다른 UF2 파일을 올리고 싶다면 리셋 버튼을 누른 상태에서 USB 케이블을 꽂으면 된다. 2. BLINK 예제 실행 Thonny 관련 설치나 사용 방법은 인터넷을 참조 하거나 이전 나의 포스트 t-picoc3 온습도 확인 하기 포스트를 보면 될듯하다. (  PICO-PO...

Raspberry Pi Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (2) 외형 만들기

이미지
Raspberry  Pi  Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (2) 이전 포스트  에선 대충 구상을 해보았다.  구상에 맞게 3D 프린터로 출력하기 위해 인쇄물을 그려볼예정이다. 1. 3D 프로그램 (SketchUP 사용) 참고로 난 3D 프로그램을 다룰 줄 모른다. 이전엔 거의 싱기버스에서 이것저것 내려받아 출력해본게 전부고, "내 생각대로 만들고 싶다" 라는 마음이 커지면서 3D CAD 무료 프로그램을 확인 하던중 웹상에서 쓸수 있는 녀석들을 찾아서 몇가지 테스트를 해보았는데, 그중 Sketchup 이라는 녀석이 쉽고 간편해서 이녀석을 무료버전으로 사용했다. 보통 이녀석으로 건축 디자인쪽을 하는것 처럼 보이는데, 내가 원하는 출력물을 만드는데 어려운 기술이나, 많은 기능이 필요 하지 않으니, 이녀석을 쓰고 있다. 부분 부분 별로 그렸고, 잘은 못하지만 한번 그려봤다. 아크릴 3T, 알루미늄 2T 의 판을 만든뒤 결합이 잘 되는지 확인도 해보고, 어디 부딛히는 부분이 있는지 살펴도 보고, 무료버전이라 그런건지, 아님 내가 기능을 못찾아서 그런건지 몰라도, 이녀석들을 결합하고 간섭이 있는 부분을 찾는게 조금 어려웠다... 그냥 일일히 죄다 확인.. 대략적으로 결합하면 요런 느낌?  좌측하단의 구멍은 아답터 잭 결합할 구멍이고 배젤을 최대한 얇게 하고 싶었다.  하부의 라즈베리파이가 들어갈 자리를 마련하느라. 아래쪽은 조금 커졌다. 그리고 각 부분의 결합은 볼트로 결합하려고 하는데.. 저번에 한번 2~3mm 볼트 구멍을 내고 출력 해보니, 역시 Anet A8 인가.. 구멍이 좀 엉망이 되긴 해서 일단 자리만 대충 만들고 내가 다시 드릴링을 해야 할듯 하다, 플라스틱이니 탭은 내지 않고 그냥 박아버릴 생각이다. 이녀석을 STL 파일로 다운로드한뒤 큐라(cura)로 넣고 변환하면 3d 프린터에서 쓸수 있게 g-code 로 변환해준다.  근데 통째로 넣는건 아니고 첫번째 사진처럼 부분부...

Raspberry Pi pico W 로 시계 및 날씨 확인 제품을 만들어 보자. (1) 구상 단계

이미지
Raspberry  Pi  Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (1) 이번엔 얼마 전에 구매한 Raspberry Pico W 를 활용해 시계 및 날씨 확인 제품을 만들어 볼예정이다. 제품에 대한 설명은 인터넷에 많으니 참고 하면 될 것 같고,  얼마 전에 회사에서 진행 하는 프로젝트가 있어 집에서 테스트 해볼려고 WS2812B (RGB LED)로 이루어진 사각형의 LED 매트릭스를 구매했는데, 회사에서 진행하는 건 STM32F 시리즈로 진행했었고, STM32F 시리즈로 구현하기엔 메모리 제한이 좀 있어, 라즈베리파이로 진행해 보려고 한다. 1. 구상 - 이런 느낌의 시계 , 측면은 한 10~20mm 정도 예상. 아크릴과 알루미늄 사이에 LED 매트릭스가 들어가면 될듯. (집에 시계가 별로 없어서 맨날 출근전에 잘 보이지도 않는 셋톱박스의 시간을 보고 집에서 나왔는데, 이녀석으로 대신 해야겠다.) * LED 매트릭스 ( 알리에서 구매함 ) (WS2812B LED 로 되어있고, 총 256 개  LED로 구성되어있다. 사이즈는 160 x 160 mm 그래서 이녀석을 시계 및 날씨 디스플레이로 한번 활용해 보려고 한다.) * 컨트롤러 - 예상 (이녀석을 알리에서 구매해서 집에서 간간히 테스트용으로 쓰고 있는데, 스펙이 STM32F103C8T6 이고 64kB 의 flash 용량에 20kB Ram 용량을 가지고 있어, 아무래도 256 LED MATRIX 를 구현하긴 용량이 부족할 것 같아, 또 집에 굴러다니던 라즈베리파이 피코 W로 구현해 봐야겠다. 날씨를 알기 위해선 아무래도 인터넷이 필요하니, pico w 가 제격 일듯.) - pico w의 스펙은 인터넷에 보면 잘 나와있다. 대략적인 스펙은 Dual-core Arm Cortex-M0+ 133Mhz, 264kB sram, 2Mb flash, Wlan, 기타 peripherals 등등. ( 난 pwm 이랑 wlan 만 있으면 될것 같다. 언어는 micro python...

T-PICOC3(MICROPYTHON)으로 WIFI 를 연결해보자. (2)

이미지
  T-PICOC3(MICROPYTHON)으로 WIFI를 연결해보자. (2) 이전포스트  에선 WIFI를 사용하기 위해 했던 설정 부분을 확인해봤고, 실제로 ESP32-C3로 주변 2.4ghz 대역의 wifi들을 검색, 연결 까지 해보았다. 그리고 원래 시간을 받아와서 시스템 시간을 현재 시간으로 맞춰줄려고 했는데... wifi를 연결하면 자동으로 시간을 가져오는듯 하다? utime.localtime() 으로 시간을 확인할수 있다. 리턴은 (2023, 5, 10, 9, 20, 7, 2, 130) 이렇게 나오고 타입은 tuple 이다. 이녀석을 조금 다듬어서 출력되고 있는 온습도 밑에 같이 출력해줘야겠다. def check_time (): buftime = utime . localtime() #print(buftime) time = str (buftime[ 0 ])[ 2 :] + "/" + zfill( str (buftime[ 1 ]), 2 ) + "/" + zfill( str (buftime[ 2 ]), 2 ) + " " + zfill( str (buftime[ 3 ]), 2 ) + ":" + zfill( str (buftime[ 4 ]), 2 ) + ":" + zfill( str (buftime[ 5 ]), 2 ) return time def zfill (s,length): return ( "00" + s)[ - length:] 위와 같이 함수를 만들어서 23/05/10 09:27:18 의 형식으로 만들었다. 참고로 저위의 zfill 이란 함수는 날짜와 시간중 한자리수 즉 1~9 까지의 숫자를 01~09로 표현해 주기위해 만든 함수다. 그리고 저번에 만든 LCD 출력 함수에 넣어서 실행 시켜 보았다. 그래도 한번 확인은 해보자  http://worldtimeapi.org/  사이트에서 세계시간을 HTT...

T-PICOC3(MICROPYTHON)으로 WIFI 를 연결해보자. (1)

이미지
  T-PICOC3(MICROPYTHON)으로 WIFI를 연결해보자. (1) 처음 T-PicoC3 를 받고 전원을 넣어보면 wifi 를 이용해 특정 ssid 에 연결하려는 시도가 보인다. 아무래도 초기 QC 에서 보드 테스트용으로 software를 올린듯 하다. 나도 이 와이파이를 이용해 현재 무선 인터넷을 사용해보자. 회로도를 보면   위는 RP2040  위는 ESP32-C3 TX , RX , CTS , RTS 가 연결되어 있는것을 알수 있다.  그럼 바로 진행 하기 앞서 ESP32-C3의 UART 커맨드를 알기 위해 검색을 좀 해보니, User guide 사이트가 있다.  ESP-AT User Guide 링크 저곳을 참고 하길 바란다. 기본 AT 커맨드로 진행 하고 wifi , bluetooth 관련 커맨드도 있다.  내가 할건 WIFI 테스트를 할거니, 일단 기본으로 AT 라고 보내서 OK가 오는지 확인해 보자. 그러기 위해선 UART를 initialize 해줘야 한다.  uart1 = UART( 1 , baudrate = 115200 , tx = Pin( 8 ), rx = Pin( 9 )) Machine 라이브러리의 Uart 메소드를 uart1 이란 변수에 넣어주고 이녀석으로 사용한다. 맨앞은 스탑비트 1을 의미하고, 보레이트, tx, rx 핀등을 정의해준다. 그리고 나의경우 보통 통신 read는 스레드에서 처리하는데, micropython 의 스레드를 테스트 하던중, 너무 빡쳐서 포기하고 폴링방식으로 처리를 했다.  한마디로 보내고 데이터 읽기 기다리고 데이터 수신 완료후 다음 순서로 진행하는 방식이다. 아직까진 테스트니깐 이러한 방식으로 일단 데이터 수신이 되는지 확인해봤다. 송신의 경우 앞에 만들어준 변수를 사용해 uart1.write("내용") 수신의 경우 buffer = uart1.read()  방식인데. 처음에  uart1.write("AT") ...

T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (4)

이미지
  T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (4) 이전 포스트  에선 machine 라이브러리의 LED 출력 및 I2C 관련 기본 정보 및 온습도계인 SHT30에 대해 조금 알아 보았다. 그리고 간단히 내 장치랑 연결되 있는 온습도계의 I2C 어드레스까지 스캔을 했다. 이번엔 데이터를 진짜 가져와 보자. 일단 machine 라이브러리에 I2C 와 SoftI2C 가 존재 하는것 같다. 일반적인 I2C 는 기본 I2C 라인을 이용하여 사용하여 효율적이고 빠르지만 핀에 제약이 있고, 소프트웨어I2C 는 모든핀에 사용하지만 효율적이지는 않다고 한다. 일단 난 기본 I2C 를 사용해서 테스트 해봐야겠다. import random import utime import st7789 import tft_config import vga1_bold_16x32 as font1 import machine from machine import UART,Pin,Timer,ADC,I2C,PWM tft = tft_config . config( 1 , 0 , 0 ) led = Pin( 25 ,Pin . OUT) i2c = I2C( 0 ,scl = Pin( 13 ), sda = Pin( 12 ), freq = 400000 ) print (i2c . scan()) def tick (timer): global buf led . toggle() def sht30_1 (): global i2c i2c . writeto( 0x44 ,b ' \x2C\x06 ' ) data = i2c . readfrom( 0x44 , 6 ) print ( str (data)) def main (): led . value( 0 ) tim = Timer() tim . init(mode = Timer . PE...