pi pico 2023年1月12日    
home > elec > RsapiPico

Raspberry pi Pico


新着
● WiFi無線(ESP-f)
 ● Raspberry pi Pico
● Raspberry pi Pico2
53 日本の空気と空は最高!
    軽口雑話-jjiの独り言
52 真北は丹沢山だった。!
    軽口雑話-jjiの独り言
51 日本にも海外移住者が多い
    のにびっくり!
    軽口雑話-jjiの独り言
50 帰るに帰れない!
    軽口雑話-jjiの独り言
電子工作
● Arduino Nano
● Arduino Nano2
● Raspberry pi Pico
 ● Raspberry pi Pico2
● ESP-f WiFi無線
お勧め
● ロティチャナイとテータレ
● 肉骨壺茶(バクテー)
● 定点観測
  (コンドの出来るまで)
● データロガー
  気温・湿度・気圧
ちょっと変わった話・おもしろ話
 10 北半球でも太陽が北に
 19 マレーシアンイングリッシュ
 28 3Hと5C
 22 あんた何歳!!
 25 英語が分からない
 46 スムメルヴィルラ
 >> ジャングル・ジョギング
マレーシア移住
 - マレーシア・小旅 -
  ポートディクソン
  田舎へ
  ランカウイ島
ヨーロッパ・旅
-ユーレイル-
  冬の旅1
  夏の旅
  冬の旅2
  東ヨーロッパの旅
 3 Raspberry pi pico

 やっとraspberry Pi picoが届きました。
まず回路を考え、基板に仮組みして今回やることは
1 LED 4回路 ---Lチカ 一回路はGP25で基板上にあるLED
2 SW 2回路 ---(1回路はレセット用)
3 I2C 3回路 ---LCD(AQM1602XA-GWB-11C) ATH25(温湿度) ADT7410(温SW度のみ)

 回路はこんな感じです。
Pi Picoもスケッチを用いて、プログラム出来ることが解ったので、このコンパイラを使ってプログラムを試してみたいと思います。
 STEP1-2 まずはLチカから、ついでにSTEP2のSW1テストも含めて、もう一つのスイッチはリセット用の端子に繋げましたので、テストとしては、押してリスタート出来るかだけです。

(try1.ino)
void setup() {
   pinMode(11, OUTPUT);  // GP11を出力に設定 
   pinMode(15, OUTPUT);  // GP15を出力に設定
   pinMode(17, OUTPUT);  // GP17を出力に設定 
   pinMode(25, OUTPUT);  // GP25を出力に設定-基板上のLED
   pinMode(13, INPUT_PULLUP);   //GP13を入力に設定 
}

void loop() {
   if (digitalRead(13) == LOW){
   digitalWrite(11, HIGH);   // 点灯
   digitalWrite(16, LOW);   // 消灯
   digitalWrite(17, HIGH);   // 点灯
   digitalWrite(25, LOW);   // 消灯
   delay(1000);
   digitalWrite(11, LOW);   // 消灯
   digitalWrite(16, HIGH);   // 点灯
   digitalWrite(17, LOW);   // 消灯
   digitalWrite(25, HIGH);   // 点灯
   delay(1000);
}
else{
   digitalWrite(11, LOW);   // 消灯
   digitalWrite(16, LOW);   // 消灯
   digitalWrite(17, LOW);   // 消灯
   digitalWrite(25, LOW);   // 消灯
}
}


 何とかうまく動きました。
ほとんどArduinoNanoと同じ構文でうごきました。


 STP3 その1
次にI2Cを動かしてみたいと思います。
最初に表示器が動けばセンサーからの数値が直接目に見える形に出来ます。センサーのテストなどでぐっとらくになります。
 LCDは秋月から仕入れました。AQM1602XA-GWB-11Cです。アドレスは0x3Eです。
Nanoと同じLCDなので、初期処理用ルーチンとコマンド書き込みルーチンと書き込みルーチーンを最初に作っておけば、良いので殆ど同じ関数で出来ました。後は、書き込みは自由に出来ます。
void init_LCD(void){
   delay(100);
   writeCommand(0x38);   // FUNCTION SET
   delay(20);
   writeCommand(0x39);   // IS=1  
   delay(20);
   writeCommand(0x14);   // INT OSC FREQUENCY
   delay(20);
   writeCommand(0x73);   // CONTRAST SET 0,1,2,3
   delay(20);
   writeCommand(0x56);   // CONTRAST SET 4,5
   delay(20);
   writeCommand(0x6C);   // F0LLOWER CONTROL
   delay(20);
   writeCommand(0x38);   // IS=0
   delay(20);
   writeCommand(0x0C);   // Display ON
   delay(20);
   writeCommand(0x01);   // Clear Display
   delay(20);
   writeCommand(0x06);   // Entry Mode
   delay(20);
}


 これがLCDの初期関数でarduino Nanoと全く同じです。スケッチの
void setup(void){...}
の中に書き込みます。
 動くようになってからCONTRAST SETの値を少しずつ変えて見ると表示が明るくなったり濃くなったりします。自分の見やすい数値を見つけ値を固定します。
 下記は、LCDへのコマンド書き込みルーチンです。
void writeCommand(char t_command){
   Wire.beginTransmission(DEVICE_ADDRESS);
   Wire.write(0x00);
   Wire.write(t_command);
   Wire.endTransmission();
   delay(10);
}

 下記は, LCDへのデーター書き込みルーチンです。

void writeData(char t_data){
   Wire.beginTransmission(DEVICE_ADDRESS);
   Wire.write(0x40);
   Wire.write(t_data);
   Wire.endTransmission();
   delay(1);
}

 上記コマンド書き込みルーチンとデーター書き込みルーチンがあれば、取りあえず表示は何でも出来ちゃうことになります。


 STP3 その2
で、上記を組み合わせて文字を表示させるところまで、もって行きます。
/* Board name : Arduino Nano */
/* LCD : AQM1602XA-GBW-IIC/Adr=0x3E */
#include <Arduino.h>
#include <Wire.h>
#define DEVICE_ADDRESS 0x3E // AQM1602XA-GBW-IIC/0x3E
char line1[] = "AQM1602XA-GBWII";
char line2[] = "yoshikon.com    ";
char test[] =  "1234567890123456"; // テスト用

void init_LCD(void);
void writeComent1(void);
void writeComent2(void);
void init_aht25(void);
void readData(void);
void writeData(char t_data);
void writeCommand(char t_command);

void setup(void) {
   Wire.setClock(115200);
   Wire.begin();
   init_LCD();
   Wire.beginTransmission(DEVICE_ADDRESS);
   Wire.write(0x20);
   Wire.write(0x01);
   Wire.endTransmission();
   writeCommand(0x02);
   for (int i = 0; i < sizeof(line2); i++) {writeData(line2[i]);}
   delay(2000);
}

void loop(void) {
   writeComment1();
   delay(2000);
   writeComment2();
   delay(2000);
}

void writeComent1(void){  // test0とtest1をLCDに書き込み
   writeCommand(0x02);
   for(int i = 0; i < sizeof(test0); i++){  // test0をLCD上段に書き込み
      writeData(test0[i]);
      delay(1);
}
   for(int i = 0; i < sizeof(test1); i++){  // test1をLCD下段に書き込み
     writeCommand(0x40 + 0x80 + i);
     writeData(test1[i]);
      delay(1);
}
void writeComent2(void){  // line0とline1をLCDに書き込み
   writeCommand(0x02);
   for(int i = 0; i < sizeof(line1); i++){  // line1をLCD上段に書き込み
      writeData(line1[i]);
      delay(1);
}
   for(int i = 0; i < sizeof(line0); i++){  // line0をLCD下段に書き込み
      writeCommand(0x40 + 0x80 + i);
      writeData(line0[i]);
     delay(1);
}
}


 10行目から15行目の関数宣言はないとエラーが出てしまいます。arduino Nanoのコンパイラではそんな事なかったのですが、loop関数より下に書いた関数はPicoでは宣言しないといけないみたいです。普通のCと同じです。

 ここまでで、LCDの書き込みまで出来ました。
 センサーの読み取り計算がまだ残っています。これは次ページにて行います。

次ページ
1  2


jji工作室にもどる


お問い合わせ