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

이미지
  T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (3) 이전 포스트  에선 LCD 라이브러리를 이용해 예제 파일을 실행 시켜보았다. 일단 다른 main.py 파일을 만들어서 예제 소스를 복사 붙여넣기 한다음, 나에게 맞게 수정을  해봐야겠다. 그리고 나머지 출력 이나 버튼 입력등의 테스트를 진행해 볼생각이다. 아 그리고 파일을 main.py 로 생성후 pico 에 다운로드시 전원 입력되면 바로 실행이 된다. 자 일단 기본 LED 예제를 넣어서 테스트 해보자. 다운로드한 라이브러리 ( 1번째 포스트 )폴더 내의 doc 폴더에 raspberry-pi-pico-python-sdk.pdf 파일이 있다.  앞부분은 다 버리고 12page 부터 LED Blink 예제가 있다. 근데 그냥 키면 재미 없으니깐 타이머 예제를 활용해서 켜보자. from machine import Pin, Timer led = Pin( 25 , Pin . OUT) tim = Timer() def tick (timer):      global led      led . toggle() tim . init(freq = 2.5 , mode = Timer . PERIODIC, callback = tick) machine 라이브러리는 마이크로 파이썬 에서 사용하는 하드웨어 제어 라이브러리다. led 변수에 Pin 이란 인스턴스메소드를 할당시킨다. 그때 매개변수를 같이 넣고 led 란 변수는 machine.Pin(25,Pin.OUT) 으로 사용. 그리고 tim 변수에  Timer() 인스턴스메소드를 할당.  def tick(timer): 로 메소드 정의후 아래에는 위에서 만든 led 를 글로벌변수로 사용하고 tick 이 불려질때마다 led.toggle() 로 LED 를 토글시킨다. 그리고 타이머 초기화는 맨아래 init 으로 초기화 하는데 , freq는 h...

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

이미지
  T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (2) 이전 포스트  에서 간단히 T-PicoC3를 간단히 켜보는 것 까지 하고 이것저것 micro python 을  프로그래밍 하기 위한 IDE , 예제소스 등을 다운 받았다. 일단 micro python 을 프로그래밍하기 위한 Thonny 를 켜보자. 일단 좌측에 파일 뷰에서 경로를 내 프로젝트 경로를 지정하고, 이전 포스트에서 git 에서 예제를 다운 받았는데 , example / micropython 에서 st7789_mpy 는 경로를 추가 한건지 다운이 안되서 따로 추가로 다운받았다.  그렇게 다운 받은 st7789_mpy 라이브러리에 examples 에서 hello.py 를 실행해 보자. 일단 처음에 삽질을 좀 했다. 컴포트를 연결해서 진행하는것 같은데... 아무리 해도 안되는데? 혹시나 리셋키를 눌른 상태에 run 버튼을 눌렀다가 두 버튼을 떼면 uf2 다운로드 모드로 들어간다. 이녀석에 대한건 구글링을 해서 찾아 보기 바람.  나도 잘 모르니, 검색을 좀 해봤다. uf2 부트로더를 rp2040 에 올려서 리셋후 버튼 조건이 맞으면 다운로드 모드로 들어가는것 같다.  부트로더로 진입하면 usb mass storage 형태로 인식하면서 새로운 드라이브로 pc 에 연결된다.  그후 .uf2 확장자로 만들어진 프로그램 파일을 복사해 넣으면 다운로드 완료. 참 간편하다. 이건 예전에 stm사의 stm32f103 nucleo 개발 보드 정품을 샀을때 처음 경험해 봤었다. 여튼 내가 원하는건 이런 모드가 아니다. 통신으로 잡혀서 진행 thonny 에서 다운로드가 가능한 형태로 변경 되어야 하는데... 이런 저런 테스트를 해보다가.....  갑자기 thonny 에서 micro python 설치팝업이 뜨네..  uf2 모드에서 thonny 의 stop 버튼 저녀석을 눌렀더니 팝업창이 나왔다. 그래서 설치를 진행...

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

이미지
 T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (1) 나는 알리익스프레스 쇼핑을 참 좋아한다. 한달에 한건 이상은 무조건 사고 싶은걸 보고 주문  하는것 같다.  이번에 산건 라즈베리파이 피코 같은 녀석인데. LILYGO 라는 회사에서 만든 제품인듯 하다. 이녀석이고 대략 15000~20000원 선 인듯 하다.  난 17000원에 샀는데 다른 판매자들은 조금씩 다르게 판다. 그리고 또 산건  이녀석 온습도 센서다. I2C로 통신하고, 전원은 2.5 ~ 5V 까지라고 한다. 일단 wire로 각각의 위치에 맞게 땜을 날려줬다.  일단 하드웨어 준비는 마쳤고. C 타입 USB 로 전원을 연결하면, 처음에 아래의 동영상 처럼 동작 한다. 처음에 제조사에서 wifi등을 테스트 하기 위한 프로그램인것 같다. 어딘가로 연결 하려고 시도하였으나, 실패. 저기서 계속 기다리고 있는것 같다.  여튼 위의 프로그램은 밀어 버릴거고, 디스플레이는 생각보다 나쁘진 않다. 자 이제 프로그래밍 모드로 들어가고 싶은데 도대체 어떻게 연결해야 프로그래밍 모드로 동작하는건지 한참 해맸다. 일단 usb c type 의 방향에 따라, RP2040 에 연결 되거나, ESP32-C3 에 연결된다.  연결후 파란색 LED 가 켜지면 RP2040 , 초록색 LED 가 켜지면 ESP32-C3 에 연결 되는데, 난 RP2040 만 연결하면 되니, 그방향으로 연결하고, 프로그래밍 툴은 thonny 라는 python ide 가 있다.  이녀석을 일단 설치,  https://thonny.org/  T-picoC3 의 예제 및 기타 폰트 소스가 있는 곳은 https://github.com/Xinyuan-LilyGO/T-PicoC3   여기 일단 프로그래밍 툴 및 예제 파일 까지 다운 받았으니,  준비는 마쳤고, 다음에 연결해서 기본 예제를 돌려봐야 겠다. 저 git 저장소엔...

C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (6)

이미지
   C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (6) 이전 (이전포스트) 엔 지정한 회차 수만큼 읽어서 데이터 값을 텍스트 박스에 뿌렸는데 , 이번엔 텍스트 박스를 과감히 지우고 차트를 한번 만들어 봤다. 마지막 회차를 알아 내는걸 만들려다가 귀찮아서 포기, 크롤링을 하던지, 회차들 읽다가 데이터 없는 회차를 확인 하던지 할려고 했는데 흥미가 떨어져 이번 차트까지만 만들고 다른걸 해봐야 겠다. 일단은 차트는 구글링으로 또 찾아보니... LIVECHART 라는 녀석이 있었다. 설치 방법은 그냥 검색만 하면 바로 나온다. visual studio 에서 상단 도구 탭 -> NuGet 패키지 관리자 -> 솔루션용 NuGet 패키지 관리 에서 찾아보기 한다음 LiveCharts.WpF 를 설치하면  LiveCharts , LiveCharts.WpF 가 둘다 설치  된다고 하는데 난 LiveCharts 부터 설치해서 그냥 다 설치 했다. 그리고 시작은  XAML 에 xmlns:lvc1="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" 를 추가한다. xmlns: 뒤에 lvc1 은 그냥 아무거나 하고 싶은대로 난 이것저것 테스트하다가 lvc1 으로  그리고 난 내가 원하는 탭의 그리드 안쪽에 차트를 추가하는데, 도구상자에 없으니깐 좀 귀찮 추가하니 이러한 모양의 그래프가 생성되었다. 근데 난 막대 그래프를 원한다.  그건 series 에서 추가 하면 되는거 같으니 뒤에서 cs 소스에서 추가 해보자.......  세로축 value 값과, 가로축 값은 라벨로 일단 적용 했드아. 차트에 series 와 밸류가 없어서 임의로 저런 모양의 차트가 나오는것 같다. 그리고 원래 데이터 값을 바인딩 하여 쓰려고 했는데.. 테스트 해보다가 ... 값이 적용이 잘안되 그냥 매번 클리어 하고 새로 추가 하는 방식으로 했다. 이전 소스에서 스레드의 마...

C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (5)

이미지
   C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (5) 이전 (이전포스트) 엔 동행복권에서 제공하는 API 라고 하긴 좀 그렇지만 여튼 그걸로 회차를 입력해서 당첨 번호를 가져왔는데,  이번엔 회차 범위를 지정하고 그중 당첨번호만 따로 저장해놓고 몇번이 얼만큼 나왔는지 확인 해보려고 한다.  그리구 이 다음엔 그 번호들로 그래프를 그려봐야겠다.  점점 초보의 한계가 보이기 시작한다....  그래도 공부니깐 Try 해야지. 늘 다른분들의 예제를 참고하여 진행 하는데.. 이번엔 진행하다가 backgroundworker에서 progressbar 의 수치를 변경하는 예제를 해보다가 안되서... 그냥 가라로 해버렸다. 나중에 더 테스트 해봐야겠다. ㅠㅠ  검색할 시작 회차와 끝 회차를 기입후 회차 검색 버튼을 눌르면 진행바가 진행되고, 완료가  되면 텍스트 박스에 각 번호별로 얼만큼 나왔는지 확인해 보자. private void button_Click ( object sender, RoutedEventArgs e) { if ( (! string .IsNullOrEmpty(textBox_num.Text)) && ( int .TryParse(textBox_num.Text, out _)) && (! string .IsNullOrEmpty(textBox_num2.Text)) && ( int .TryParse(textBox_num2.Text, out _))) { button.IsEnabled = false ; worker = new BackgroundWorker(); worker.WorkerReportsProgress = true ; worker.DoWork += worker_dowork; worker.ProgressChanged += worker_progress; } else { textBox_js...

C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (4)

이미지
    C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (4) 이전 (이전포스트) 엔 선택한 버튼의 숫자를 텍스트 박스에 넣어주는 것과, 6개의 번호를 다 랜덤으로 만들어 주는 메소드를 만들었었다.  이번엔 몇개의 특정 번호는 내가 선택하고 나머지 숫자들을 랜덤으로 만들어 주는 버튼의 이벤트 메소드를 만들어야 겠다. 근데 저번에 만든 소스에서 조건만 넣어주면 될 것 같아서 메소드에 매개변수를 추가 해서 조건만 넣어 주었다. private void rand_num_create ( bool bAll_rand) { Random cRandomobj = new Random(); int [] iaRand_num = new int [ 6 ]; int iRandbuff = 0 ; int iBoxCount = 1 ; if (bAll_rand== true ) { button_clear(); iCount = 0 ; } else if (iCount< 6 ) { int iRandA_count_buff = 0 ; for ( int k = 1 ; k < 46 ; k++) { if (baLotto_number[k] == true ) { iaRand_num[iRandA_count_buff++] = k; } } } while (iCount < 6 ) { iRandbuff = cRandomobj.Next( 1 , 46 ); if (!Array.Exists(iaRand_num, x => x == iRandbuff)) { iaRand_num[iCount++] = iRandbuff; baLotto_number[iRandbuff] = true ; caButton[iRandbuff].Background = new SolidColorBrush((Co...

C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (3)

   C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (3) 이전 (이전포스트) 엔 클릭한 버튼 색상을 변경하고, 6개 이상 눌르면 더 선택 못하게 팝업창을띄웠었다.  이제 클릭한 버튼의 텍스트를 텍스트 박스에 넣어봐야겠다. 버튼을 클릭할때마다 박스에 순차로 채우는것 보단, 아무래도 내림차순으로 채워 주는게 좋을듯 싶어 버튼 클릭 이벤트 마다 박스 내용을 지우고, for 문을 돌려 상태값을 저장한 배열에서 선택된 애들만 박스에 순차로 넣으면 내림차순으로 채워질것 같다. 일단 텍스트 박스도 클래스로 배열을 만들어 각각의 텍스트 박스를 넣어줘야겠다. TextBox[] caBox = new TextBox[ 7 ]; 역시 0부터 하면 가끔 햇갈려서 1부터 하려고 박스는 6개지만 배열을 7개를 만들었다. private void create_array () {      for ( int i = 1 ; i< 7 ; i++)      { caBox[i] = this .FindName( "textBox" + i.ToString()) as TextBox;      } } 위처럼 메소드를 하나 만들어서 위에 만든 배열에 나의 텍스트 박스들을 넣어줬다. 인터넷에 찾아보니, 위의 FindName 을 써서 xaml 에서 이름을 찾아서 넣을 수 있는것 같다.그리고 저 메소드를 메인 윈도우 메소드에서 실행하게 해놨다. 그렇게 만든 텍스트 박스 배열들로 버튼 이벤트가 발생되면 박스내용을 초기화 하고 상태값을 저장한 배열에서 변경된 애들만 검색해서 텍스트 박스에 순차로 집어넣자 private void button1_Click ( object sender, RoutedEventArgs e) {           Button cButton = (Button)sender; ...