2020年11月19日
うまいこと、今回私が使ったDoit devkitのボードのコンパイルのやり方を説明してるページを見つけたので、関連情報URLのところへ行って、「DOIT ESP32 DEVKIT V1」と書いてあるあたりからのやり方を参考にして、コンパイル&ダウンロードしてください。回路がうまく接続されていれば、フリードにつなぐことで、水温計とタコメータとして動作するはずです。
なお、他の計器(速度計、燃費計、外気温計)にしたい方のために、後日ソースコードの解説を追加します。
ちょっと反省点を書くと、
1)本体のところと、OBDのところは、面倒でもコネクタで脱着できるようにしておくと、後でソフトを書き替えたいとき、簡単に自宅に持ち帰れるのでその方がよかった。(本当は、表示をもっとかっこよくしたいのだけれど、もう外すのが面倒でやる気なし。)
2)タコメータの表示は、数字で表示するのではなく、バーグラフで表示するようにしとけばよかった。
3)タコメータを200msで更新するようにしたのだけれど、まだ速すぎる。300ms
で十分だった。
4)本体に接着で蓋したので、実はコントラスト調整ができませぬ。なので、かっこ悪くとも斜め上からLCDを覗き込むようにしないとまともに見えない。あの設置角が実は肝だったりします。皆さんは蓋する前にちゃんと表示が見えるのを確認するようにしましょう。
Posted at 2020/11/19 20:03:13 | |
トラックバック(0) | 日記
2020年11月19日
下記にソースコードを示します。エディタにコピペして、適当な名前を付けて、拡張子を”ino"にして保存してください。その後、Arduino IDEで開けば、コンパイル通るはずです。なお、実際に設置した水温計のソースからコメントとか、デバックコード消したり、ドライバが新しくなったためエラーが発生したところを修正したので、100%動く保証はできないんですが、たぶん大丈夫かと。
次回は、コンパイルの仕方説明します。
↓この下からソースです。
#include
#include
#include
#include
CAN_device_t CAN_cfg;
unsigned long prev_time;
byte loop_counter;
int last_rpm;
//unsigned byte test;
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
void setup() {
CAN_cfg.speed=CAN_SPEED_500KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_5;
CAN_cfg.rx_pin_id = GPIO_NUM_4;
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//start CAN Module
ESP32Can.CANInit();
prev_time = millis();
lcd.begin(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Waiting CAN");
}
void loop() {
int current_rpm;
CAN_frame_t rx_frame;
//receive next CAN frame from queue
if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){
if ((rx_frame.MsgID & 0xFFFFFF00) == 0x18daf100) {
if ((rx_frame.data.u8[2])== 0x05) {
lcd.setCursor(0,0);
lcd.print("Water Temp = ");
lcd.setCursor(13,0);
lcd.print((signed char)(rx_frame.data.u8[3]) - 40);
}else if ((rx_frame.data.u8[2])== 0x0c) {
current_rpm=(int)(((int)rx_frame.data.u8[3])*256 + (int)rx_frame.data.u8[4])/4;
if (current_rpm != last_rpm) {
lcd.setCursor(0,1);
lcd.print("ENGINE rev: ");
lcd.setCursor(12,1);
lcd.print(current_rpm);
last_rpm = current_rpm;
}
}
}
}
if ((prev_time-millis())> 50) {
prev_time=millis();
if (loop_counter == ((loop_counter/4)*4)) { // if counter value is even
rx_frame.FIR.B.FF = CAN_frame_ext;
rx_frame.MsgID = 0x18db33f1 ;
rx_frame.FIR.B.DLC = 3;
rx_frame.data.u8[0] = 0x02;
rx_frame.data.u8[1] = 0x01;
rx_frame.data.u8[2] = 0x0C; // Request engine speed
ESP32Can.CANWriteFrame(&rx_frame);
} else if (loop_counter == 19) { // 1sec expired
rx_frame.FIR.B.FF = CAN_frame_ext;
rx_frame.MsgID = 0x18db33f1 ;
rx_frame.FIR.B.DLC = 3;
rx_frame.data.u8[0] = 0x02;
rx_frame.data.u8[1] = 0x01;
rx_frame.data.u8[2] = 0x05; // Request coolant temperature
ESP32Can.CANWriteFrame(&rx_frame);
}
if (loop_counter >= 19) {
loop_counter = 0;
} else {
loop_counter++;
}
}
}
Posted at 2020/11/19 19:48:56 | |
トラックバック(0) | 日記
2020年11月19日
次に、LCD表示のためのLCDドライバーを導入します。CANドライバ同様に関連情報URLのサイトに行って、下図のようにダウンロードします。
その後、CANドライバの時同様、下図のようにライブラリを組み込めば、開発環境の構築は完了です。

Posted at 2020/11/19 19:41:08 | |
トラックバック(0) | 日記
2020年11月19日
次に、Arduino IDEにESP32用のCANドライバのソフトを導入します。関連情報URLのサイトに飛び、下記のようにZIP形式のファイルをダウンロードします。
続いて、ArduinoIDEを立ち上げて、下記のようにライブラリの導入を選んでから、上記でダウンロードしたZipファイルを導入します。

Posted at 2020/11/19 19:36:14 | |
トラックバック(0) | 日記
2020年11月19日
今度は、Arduino IDEにESP32をコンパイルするための機能拡張を行います。関連情報のリンク先に行き、最新のやり方に従ってボードマネージャーから追加してください。これでESP32のソフト開発ができるようになります。
Esp32の基板を購入したら、まずは、この段階で、Blink のサンプルコードをコンパイル&ダウンロードして、Lチカの確認を済ませて置くことをお勧めします。
Posted at 2020/11/19 18:06:57 | |
トラックバック(0) | 日記