matlabのバージョンが上がるとともに、利用できるマイコン・ボードは増えています。matlab R2020aからArduinoマイコン・ボードにESP32 DevKitが追加されました。
ESP32はリビジョンEが最新で最終版です。今回利用したのは初期のバージョンです。ESP32シリーズは、改良したESP32-S3などに移行中です。
ESP32-DevKitC ESP-WROOM-32開発ボード
環境
- matlab home License R2022b update1
- MATLAB Support Package for Arduino バージョン21.1.0
- Windows 10 Pro 22H2 メモリ40Gバイト
ピン配置
Arduinoのアドオンをインストール
メニューのホームをクリックし、右端のほうにあるアドオンをクリックします。
検索欄にarduinoを入れた結果です。MATLAB Support Package for Arduino Hardwareをクリックします。
インストールをクリックします。
クリックしていくと、ダウンロードとインストールが始まります。
今すぐセットアップを選びます。Arduinoマイコン・ボードは、PCとUSBケーブルでつないでおきます。
途中で、USBドライバのインストールをしてよいかと聞かれるので、次へをクリックします。
実際につないで続けるかと聞かれるのでYesのまま次へをクリックします。
接続方法を聞いてくるので、USBを選択し、次へをクリックします。
ボードを選択します。
COMポートを選択します。
アップロードするライブラリを聞いてきます。I2CとSPIにチェックをしました。Programをクリックします。
途中で、timeoutをしたので、BOOTボタンを押すようにと出るのでそうします。押したままです。
次のパネルが出ると、BOOTボタンから手を放し、OKをクリックします。
インストールが成功しました(画面とり忘れた)。
接続テストをします。
timeoutのパネルが出ます。BOOTボタンを押し、次のパネルが出たらリリースしますが、失敗します。
気にせずに次へを押し、終了します。
I2Cでプログラミング
ここでも、書き込み時にtimeoutが出ます。対応方法は同じですが、こちらの方の記事ESP32のプログラム書込みを安定させるを参考にし、EN-3.3V間に0.1uFを入れたら、timeoutは起こらなくなりました。
clear
a = arduino('COM3', 'ESP32-WROOM-DevKitC', 'Libraries', 'I2C')
addrs = scanI2CBus(a)
tmp117 = device(a, 'I2CAddress', '0x48');
TemperatureRegister = 0x00;
ConfigurationRegister = 0x01;
Ctrl_OUT = [0x00, 0x60]; % Continuous conversion,Conversion cycle=000,averaging=11 is 64...1sec
writeRegister(tmp117, ConfigurationRegister, Ctrl_OUT, 'uint8');
for i=1:10
RegisterData = readRegister(tmp117, TemperatureRegister, 2);
temperature = double(bitshift(uint16(RegisterData(1)), 8)) + double(RegisterData(2));
temperature = bin2dec(append('0b',dec2bin(temperature),'s16'))* 0.0078125; % 2's complement R2020a
fprintf(' temperature is %.5f \n', temperature);
pause(2);
end
トラブルシューティング
matlabのバージョンを上げると、既にインストールしているアドオンのバージョンも最新になります。
しかし、今回、設定アイコンが消えていました。なので、一度アンインストールして、再度インストールをしました。
timeout
ESP32ボードは、数十種類が市販されています。なので、挙動はみな同じではないと思います。また、BOOTボタンのないボードもあります。