マイコンをRP2040にしました(2025-2-17作成)
今回の要旨
・マイコンをESP32からRP2040 に変更した内容をお知らせします
・CO₂センサ(¥8,548)が高いので廉価版ENS160を探しました
次回は、ENS160をテストします。ただし、中国からで納期がかかるようです
マイコンの選択
・従来のマイコンは背景色が青で、新しいRP2040は背景色が黄色です
特徴は
1.Raspberry Piで使用されています
3.USBがTypeBからCになりました
4.CO₂計測用のI2Cと液晶表示用のSPIを備え、最もシンプルなRP2040を選びます
部品
・マイコン
-
-
秋月電子、マルツ、AliExpressでも購入できます
-
・液晶ディスプレイ
-
-
秋月電子、AliExpressでも購入出来ます
-
・CO₂センサ
DigiKeyでも購入できます。ただし、少し高いため、廉価版を物色しています
代買え候補(センサーをCCS811からENS160に変更します)
-
-
ネットで調べたところ、ソースコードはありますので、容易に作れそうです。しかし、動作が安定するまでに時間がかかるようです
- 同用品はAliExpressで購入できそうです。ただし、これまでに配送ロスト、誤配信、商品破損があり、対応に時間がかかりました。購入は自己責任でお願いします
-
-
配線方法
・配線案を先に決める必要があります。材料は両方揃っているので、
この際、両方作れそうです
ピンとコネクターは共立エレショップで購入しました
-
-
-
ギボシ端子などに使うものはありますが、それより小さいサイズのものを圧着ペンチで購入しました
線材はAWG26にしました
-
-
回路図
・昨年までは会社でアプリを使用できましたが、
退職したため、フリーで簡単そうな『水魚堂の回路図エディタ』を使ってみました
-
- 下記を参照しながら回路図エディタを使用しています。今回は回路が簡単なため、ネットリストは使用しません。基板を外注せず、プリント基板設計も行いません(できません)
- 下記を参照しながら回路図エディタを使用しています。今回は回路が簡単なため、ネットリストは使用しません。基板を外注せず、プリント基板設計も行いません(できません)
・作成途中のものを下記に貼り付けておきます。単純な配線ですが、不格好ですね……
プログラム
・下記を参照しました
-
- 開発ソフトのインストールから、I2CとSPIの設定、そしてサンプルソースがあります
- 開発ソフトのインストールから、I2CとSPIの設定、そしてサンプルソースがあります
・実際のソースコードは下記のようになっています
-
-
#include <SPI.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1331.h>
//Font#include "/Users/shigu/Library/CloudStorage/Dropbox/Arduino_inDropbox/libraries/Adafruit_GFX_Library/Fonts/FreeSans9pt7b.h"
//TextColor サンプル (16-bitで指定 5-6-5 Color)#define SSD1331_BLACK 0x0000// #define SSD1331_BLUE 0xF800// #define SSD1331_YELLOW 0x07FF#define SSD1331_WHITE 0xFFFF
// Declaration for SSD1331 display connected using software SPI (default case):#define cs D7 //Connect SSD1315 CS ChipSelect SlaveSelect#define dc D3 //Connect SSD1315 D/C Data/Command control#define rst D2 //Connect SSD1331 RES Reset#define mosi D10 //Connect SSD1315 D1 MasterOut SlaveIn#define sclk D8 //Connect SSD1315 D0 Serial ClockAdafruit_SSD1331 disply( cs, dc, mosi, sclk, rst);
void setup() {// put your setup code here, to run once:Serial.begin(115200);disply.begin( );disply.fillScreen( SSD1331_BLACK );disply.setFont( &FreeSans9pt7b );}
int reading = 2222, co2Int = 0;float temp = 2623, tempInt = 0;
void loop() {// step 1: wake sensor
// put your main code here, to run repeatedly:Serial.println("");
// step 3: instruct sensor to return a particular echo reading
// step 4: request reading from sensor
// step 5: receive reading CO2 from sensorreading = reading << 8; // shift high byte to be high 8 bitsif (co2Int != reading) {co2Int = reading;disply.fillRoundRect(0, 4, 94, 19, 1, disply.color565(20, 20, 20) );disply.setTextSize(1); // Normal 1:1 pixel scaledisply.setTextColor(disply.color565(200, 200, 120));disply.setCursor(0,20); // Start at top-left cornerdisply.print(F(" CO2:") );disply.setCursor(50, 20); // print OLEDdisply.print(reading);}//for debugSerial.print(reading); // print SerialSerial.println(" CO2");}
// step 6: read temperaturereading = reading << 8; // shift high byte to be high 8 bitstemp = reading;if (temp != tempInt) {tempInt = temp;disply.fillRoundRect(0, 33, 94, 19, 1, disply.color565(20, 20, 20) );disply.setCursor(3,48); // Start at top-left cornerdisply.print(F("temp:") );disply.setCursor(53, 48); // print OLEDdisply.print((temp / 100), 1);}//for debugSerial.print((temp / 100), 1); // print SerialSerial.println(" C");}delay(5000);
}
-
はじまり
コロナウイルスが流行していた頃にCO2濃度計を作りました
この方の情報を参考にしてブレッドボード上に作成しましたが、液晶の色がくすんできた
ため、改修を計画しています。下記資料を参考にして作成
経歴
1号機 ESP32 38Pin
<回路図> 上記記事からの引用です。ともふみさん ありがとうございます
<実機> ソフトは2号機と同じです。液晶(OLED)は新品に交換済みです
2号機 ESP32 30Pin
<回路図> 30Pinしたのは安かったからです。技術的な理由はございません
<実機> テストのみ実施しました
3号機 RP2040
<回路図> マイコンをXIAO RP2040にしました。アリエクで2個送料込みで2129円
<実機> ブレットボードでのテスト写真
以上。これからもよろしくお願いします