2023年12月31日 (日)

今年も aitendo 2024お楽しみ福BOX を買いました

Happybox2024alabel

 今年も 12月30日(土)10:00から発売になった 2024お楽しみ福BOX というネーミングのaitendo福袋(税別2,024円)を買いました。なんと5分弱で限定100点が売り切れてしまいました。すごいなw

んで,26時間後の今日12月31日(日)のお昼に届いたので,さっそく中身をご紹介します。
Cimg1237

ドットマトリックス液晶(128x32) [TS207]
3.5インチ液晶モジュール★320x480★ [M035C9486LB3]
巨大なセグメント液晶モジュール [CM1441A-V4]

Cimg1238

ESP-32でいいの★ESP-32★ [R32D1] 2枚
↑ これのESP-WROOM-32がついてないやつっぽいですね。
DACヘッドフォンアンプ基板(半成品) [MB2704]
Eインクディスプレイ [A152P34]
TWELITE BLUE SMD(ハテナ型アンテナ付属)【TWE-L-W7】

  Cimg1239
★8x8★2.3★フルカラードットマトリックス(RGB) [KEM23088BRGB]
SIP化LEDモジュール [CK001-3P]
砲弾型LED各種

Cimg1240
★EASY版★DSPラジオキット(AM/FM/SW) [K-443B] の前の型だと思います。正確に言うとコレかな。
★国産電解コン搭載★整流平滑キット [K-D4C]
動作センサーパル [MW-PAL-MOT-0]
5V出力DC/DC電源モジュール [HZ-01]
マイクロDCモータ [RF-300CA-11440]

Cimg1241
5V出力電源キット [K-1R505]
ヘッドホンアンプキット [K-HPA5532CS]
電源レギュレータキット [AKIT-78M2P]
メロディIC [TQ-D3][TS0805B][JH668]
LED点滅ドライバー [H-16A]
7セグLED時計キット

Cimg1242
★和音16曲★メロディ再生キット [AKIT-66A]
マイクロUSBコネクタ
ジェンダーチェンジャー  [GCH]
AKIT-317B
ポリ袋
各種ミニ基板

ちょっと扱いに困るモノもありますが,2,024円以上の商品が入っているのは確実です。
お正月休みはaitendoのキットを作ってのんびり過ごそうかな :D

| |

2023年12月29日 (金)

CH32V003+I2C接続のLCDでHello World !

 CH32V003F4P6開発ボードにI2CでLCDをつないでHello World !と表示させてみました。
また,秋月電子で1個40円の8ピンSOP CH32V003J4M6 を買ったので,これでも同じことをやってみました。
Shotcut_00_00_29_280
開発ボードとデバッガWCH-LinkE前回と同様,このように↓ 接続します。
M18065_20231229124201

スケッチはこんなかんじ↓

//CH32V003 + AQM1602でHello World
//SDA,SCLを10kΩでプルアップ

#include <Wire.h>
#define LCD_ADR 0x3E
char buf[]="";

void writeCmd(byte cmd){
Wire.beginTransmission(LCD_ADR);
Wire.write(0x00);
Wire.write(cmd);
Wire.endTransmission();
delay(1);
}

void writeData(byte data){
Wire.beginTransmission(LCD_ADR);
Wire.write(0x40);
Wire.write(data);
Wire.endTransmission();
}

void setCursor(byte clm,byte row){
if(row==0) writeCmd(0x80+clm);
if(row==1) writeCmd(0xc0+clm);
}

void init_LCD() {
writeCmd(0x38);
writeCmd(0x39);
writeCmd(0x56);
writeCmd(0x6C);
writeCmd(0x01);
writeCmd(0x0C);
}

void strPrint(char *str){
while(*str != 0)
writeData(*str++);
}

void numPrint(int num){
String strnum = String(num);
strnum.toCharArray(buf,10);
strPrint(buf);
}

void setup() {
Wire.begin();
init_LCD();
setCursor(0,0);
strPrint("Hello World!");
}

void loop() {
setCursor(0,1);
numPrint(millis()/100);
}

LCDは秋月電子で買ったAQM1602で,マイコンボードとはこのようにつなぎます。SDAとSCLは10kΩくらいの抵抗でプルアップすることを忘れずに。

Untitled-sketch_2

 このマイコンボードはうまくいったので,続けて8ピンSOPのCH32V003J4M6 でも同じことをやってみました。SOP8のままではブレッドボードに刺さらないのでDIP変換基板を使います。

プログラムをアップロードするときはこうやって↓ つないで,
202312282
LCDはこうつなぎます↓
Untitled-sketch_4

では,動画をご覧ください。

| |

2023年12月20日 (水)

CH32V003F4P6 開発ボードでLチカ

Cimg1180

 前回の続きです。32ビットRISC-VマイコンCH32V003F4P6開発ボード用のプログラマ・デバッガ WCH-LinkEが注文後2週間かかって中国深圳から届いたので,Lチカをやってみました。
971594304_max_2

◆ WCH-LinkEのモードを「WCH-LinkRV」に設定する

 まず,WCH-LinkEでCH32V003に書き込みができるように,ココで WCH-LinkUtility をダウンロードして WCH-LinkUtility.exe を実行します(インストール不要の実行ファイルです)。

20231202_1

Active WCH-Link Mode で プルダウンメニューからWCH-LinkRV を選んで,Set すればOK。

◆ Arduino IDE のボードマネージャで CH32 MCU EVT Boards をインストール

 次にArduino IDE の設定です。ボードマネージャーのURLに以下のURLを追加して,

https://raw.githubusercontent.com/openwch/board_manager_files/
main/package_ch32v_index.json

ボードマネージャでCH32で検索すると見つかる CH32 MCU EVT Boards をインストールしてやります。

Image202312191

WCH-LinkEとマイコンボードを下のようにつなぎます。3本でいいからラクですね。
M18065

◆ あれれ? スケッチ書き込みに失敗!

 Arduino IDE でマイコンボードはCH32V00X を選んでLチカのスケッチを書き込んでやろうとしたら,エラーが出て書き込みに失敗しました。
Image4_2_20231220051701

Error: WCH-Link failed to connect with riscvchipっていうことですから,マイコンチップを認識できてないみたい。困りましたね。
んで,ネット検索して見つけたのは秋月電子のWCH-LinkEエミュレーターの質問と回答というページ。

【質問】 一度プログラムをダウンロードしたら再度ダウンロードできなくなりました。[2023/06/21 11:05:55]
【回答】 プログラムのダウンロードに使用しているピンで、その他(SWDIO以外)の機能が有効となっていると通信できずに失敗します。ダウンロードしたプログラムを削除してから、改めてダウンロードをお試しください。

MounRiver Studio(MRS)のメニューの...
Flash→Configurationで開くダイアログで、Clear Code Flashを実行します。
なお、CH32V003J4M6については外部にリセットピンがありませんので、電源OFFでリセットをかける必要があります。
Clear Code Flash実行時に、By Power offを選択してApplyしてください。(2023.06.21 現在)

 そういえば,このマイコンボード,通電すると基板上のチップLEDが点滅するから,あらかじめ何かのプログラムが書き込まれてるっぽいです。それを消しちゃえばいいのかも。

◆マイコンをキレイに掃除しましょ

MounRiver Studio という巨大なアプリケーション(ストレージを4.4GBも占有する!)をインストールし,メニューから Configration に入って Erase Code Flash を実行します。
Image6_20231220060001

 すると,基板上のチップLEDが消灯したので,マイコンチップはキレイに掃除できたみたい。で,すかさず Arduino IDE でLチカスケッチを書き込んでみると,今度はちゃんと書き込みに成功しました :D
 その後,MounRiver Studio を使わなくても WCH-LinkUtility で Erace Chip できることを発見したので,MounRiver Studio は速攻でアンインストールしましたとさw

202312201

このマイコンボード,送料込み364円と安いけど まあまあのスペックなので,これからも使ってやろうかな。

| |

2023年12月 7日 (木)

Arduinoで作ろう(64) カラフルな影

Cut_00_03_03_287

 「智恵の楽しい実験」にある「影は何色?(赤・緑・青の光が作る影)」をマネして作ってみました。クリスマスっぽいネタですなあ :P
 智恵さんは3WのハイパワーRGB LEDを使ってPWMで制御されてるようですが,僕はお手軽にマイコン内蔵RGB LED WS2812Bってのを使ってみました。

Ws2812b_

 ココにあるAdafruit NeoPixelライブラリを使うとスケッチもすごくコンパクトになります。下のスケッチは,動画の後半部分の「3個のLEDの色をじわじわ変える」やり方を示しています。
WS2812Bはちょっと光量不足で,ビデオで撮ると今ひとつですが 肉眼で見るなら十分明るいしキレイですよ。

//RGBフルカラーLED WS2812B (Adafruit_NeoPixelライブラリを利用)

#include <Adafruit_NeoPixel.h>
#define PIN 1 // 出力ピンは D1
#define LED 3 // LEDは3個
Adafruit_NeoPixel pixels(LED, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
pixels.begin();
}

void loop() {
for (int i = 0; i < LED; i++) {
for (int j = 0; j <= 255; j++) {
pixels.setPixelColor( i%3, pixels.Color(255-j,0,j));
pixels.show();
pixels.setPixelColor((i+1)%3, pixels.Color(j,255-j,0));
pixels.show();
pixels.setPixelColor((i+2)%3, pixels.Color(0,j,255-j));
pixels.show();
delay(10);
}
delay(3000);
}
}

| |

2023年12月 2日 (土)

WCH-LinkE とWCH-Link は別モノである

20231202img1082
 2週間前にAliExpressで買ったプログラマ・デバッガが意外に早く中国から届いたので,さっそく先に届いていたCH32V003ボードに接続してみました。先人の教えに従って環境を整え,Arduino IDEでLチカのスケッチを書き込もうとしたら,次のようなエラーが出ました。

Error: if your chip is CH32V00X,WCH-Link-CH549 does not support this chip, please use WCH-LinkE

「どういうこと?コレ,WCH-LinkEじゃないの?」と,老眼でよく見えないから虫眼鏡を使って見てみると・・・
20231202img1083
うむ,確かに WCH-Linkと書いてあるようだが,「E」がついてるのとついてないのは何か違うのか?
WVH-LinkE の画像検索をしてみると,コレ↓ がそうらしい。
20231202wchlinke
 こっちはWCH-LinkEと書いてあるな。どっちも透明プラケースに入ったUSBドングルで そっくりだけど これはタクトスイッチが2個ついてるし(プラケースに入ってるから押せないよなあw),確かに別モノっぽい。
さらに検索したらこんな表を見つけた。
Supportedchip

 おいおい,やっぱり「E無し」の WCH-Linkは,CH32V003をサポートしてないんだ・・・。しかし,名前も見た目もソックリすぎるだろ,これ。多くの人が僕と同じ失敗をしてるんじゃないの?
くやしいけど,別のセラーに「E付き」のWCH-LinkE注文しました。また,2~3週間待たないとねw

| |

2023年12月 1日 (金)

Arduinoで作ろう(63) UNO R4 WiFiでスクロールNTP時計

 Arduino UNO R4 WiFi を手に入れました。
2773981_2
 なんと言っても目を引くのはオンボードの 12×8ドットマトリクスLEDじゃないでしょうか。あと,ESP32-S3モジュールね。なんだか夢が広がりますなあ(^^)
 pinoutはこんな感じ ↓
Abx00087pinout

 せっかくESP32モジュールとLEDマトリクスを積んでるんだから,WiFiでネット接続してNTPサーバから時刻を取得してドットマトリクスLEDでスクロールする時計を作らないとね。( また時計かw )
んで,とりあえずできました。ライブラリは新たに2つくらい入れたんだったかな。NTPClientライブラリArduinoGraphicsライブラリです。たぶん。
Shotcut_00_01_54_087

// Arduino UNO R4 WiFi スクロールNTP時計
// NTPClient library (https://github.com/arduino-libraries/NTPClient)
// ArduinoGraphics library (https://github.com/arduino-libraries/ArduinoGraphics)


#include "RTC.h"
#include "NTPClient.h"
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
#include "WiFiS3.h"
#include "WiFiUdp.h"
char ssid[] = "ここに無線LANのSSIDを書く" ;
char pass[] = "ここにパスワードを書く" ; // 
int wifiStatus = WL_IDLE_STATUS;
WiFiUDP Udp;
NTPClient timeClient(Udp);
ArduinoLEDMatrix matrix;

void printWifiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
}

void connectToWiFi(){
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true);
}

while (wifiStatus != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
wifiStatus = WiFi.begin(ssid, pass);
delay(10000);
}

Serial.println("Connected to WiFi");
printWifiStatus();
}

void setup(){
Serial.begin(9600);
while (!Serial);

connectToWiFi();
RTC.begin();
matrix.begin();
Serial.println("\nStarting connection to server...");
timeClient.begin();
timeClient.update();
auto timeZoneOffsetHours = 9;
auto unixTime = timeClient.getEpochTime() + (timeZoneOffsetHours * 3600);
Serial.print("Unix time = ");
Serial.println(unixTime);
RTCTime timeToSet = RTCTime(unixTime);
RTC.setTime(timeToSet);
RTCTime currentTime;
RTC.getTime(currentTime);
Serial.println("The RTC was just set to: " + String(currentTime));
}

void loop(){
char buff[16] ;
const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
RTCTime currentTime;
RTC.getTime(currentTime);
sprintf(buff, " %04u/%02u/%02u(%s) ", currentTime.getYear(), Month2int(currentTime.getMonth()), currentTime.getDayOfMonth(),wd[(int)currentTime.getDayOfWeek()]) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();

sprintf(buff, " %02u:%02u:%02u ", currentTime.getHour(), currentTime.getMinutes(), currentTime.getSeconds()) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}

 サンプルスケッチを参考にして,ツギハギで作ったので あんまり美しいコードではないですが,とりあえず動いてます。Arduino IDE のシリアルモニタで,無線LANアクセスポイントに接続したことを確認できるようになってます。まあ確認しなくても大丈夫ですが。

| |

«ドライアイス不要の霧箱 (4)