文字化けしないキーボード
2023.07.01 /2023.10.25更新
YouTube でも紹介しています。画像をクリックすると再生できます。
Ubuntu Server の初期インストール時に、ネットワークとSSH接続設定さえ行えば、あとはノートパソコンからログインして作業を進めることができます。
この初期インストールの際に日本語キーボードを使うと、ネットワーク設定ファイルをviで開いたときに、IPアドレス指定に使う「[」「]」やファイル保存時の制御文字「:」などが文字化けしてしまい非常に面倒です。
そこで今回は文字化けしない仮想キーボードを作りました。
※日本語キーボードを用いたときには、: ← [Shift] +、[ ← @、] ← [ で対応していました。
システム構成は下記のようになります。
ATmega32u4チップ搭載のマイコンでHIDキーボード機能を動作させ、Raspberry Pi にUSB接続して、
ノートパソコンからはTeraTermでマイコンボードにBluetooth接続します。
●Adafruit ItsyBitsy 32u4 3V@8MHz
・ATmega32u4 onboad chip in QFN package
・3.3V power and logic, 8 MHz clock rate, 2KB RAM and 28K FLASH
・Can act as a USB HID Keyboard, Mouse, MIDI or plain USB 'CDC' serial device (default)
・On-board red pin #13 LED
・23 GPIO total - 6 analog in, 1x SPI port, 1x I2C port, 1x Hardware Serial port and 10 more GPIO, 4 of which have PWM
・Special Vhigh output pin gives you the higher voltage from VBAT or VUSB, for driving NeoPixels, servos, and other high-current devices. Digital 5 level-shifted output for high-voltage logic level output.
●Pinout
3.3V出力ピンは最大500mAの出力が可能です。デジタル5番ピンは出力のみですが5Vロジックに対応しています。
Itsy Bitsy 32u4 3V@8MHz と 5V@16MHz では若干ピン配置が異なります。
3V@8MHz:VMAX,GND ←→ 5V@16MHz:GND.3.3V と電源周りが逆転しているので危険です。
ATmega32u4 (Leonardo, ProMicro)にはシリアル通信専用のマイコンが搭載されておらず、
シリアルポートはパソコンとマイコン上のソフトウェアにより、仮想的に実現されています。
ブートローダが動いているときには、USBのCommunications Device Class (CDC)ドライバのインスタンスを生成しています。
Arduino Unoとは異なり、ATmega32u4搭載マイコンはパソコンでシリアルポートを開いてもスケッチをリスタートしません。
ATmega32u4マイコンでは、SerialクラスはUSBによるパソコンとマイコン間の仮想シリアルドライバを指します。これはArduino Unoといった従来のArduinoマイコンボードとは異なり、0番ピンおよび1番ピンとは繋がっていません。ハードウェアシリアルポート(0番ピンおよび1番ピン、RXおよびTX)を使用するには、Serial1クラスを使います。
Arduino Leonardoへのガイド
●HC-06 Bluetooth Serial Port Module
ItsyBitsy 32u4 をこのモジュールにシリアル接続して、パソコンとBluetooth通信を行います。
Bluetooth 2.0 serial port module.
MODEL | HC-06 |
Work band | 2.4G |
Communication interface | UART3.3V TTL |
Working voltage | 3.6~6V |
Air Speed | 2Mbps |
Communication level | 3.3V |
Communication current | 40mA |
Receiving sensitivity | -85dBm @ 2Mbps |
Reference distance | 10m |
※5Vロジックを使用する場合
ItsyBitsy 32u4 3V/8MHz では、HC-06に直接接続できますが、5V系のLeonardoやPro Microを使用する場合は注意が必要です。
ArduinoのRXDをモジュールのTXDに接続し、ArduinoのTXDを抵抗分圧器を介してモジュールのRXDに接続するだけです。この分圧器は、Arduino から送信された 5V ロジック信号をモジュールに適した +3.3V ロジック信号に変換するために提供されます。
How to use HC-06 Bluetooth Module
ItsyBitsy | - | HC-06 |
RX | - | TXD |
TX | - | RXD |
GND | - | GND |
3V | - | VCC |
ソースコードのビルドには、PlatformIOを使用しています。
Arduino開発環境構築 PlatformIO
$ mkdir ~/ItsyBitsy32u4
$ cd ~/ItsyBitsy32u4
$ pio boards ItsyBitsy
Platform: atmelavr
==========================================================================
ID MCU Freq Flash RAM Name
---------------- ---------- ----- ----- ------ ---------------------------
itsybitsy32u4_3V ATMEGA32U4 8MHz 28KB 2.50KB Adafruit ItsyBitsy 3V/8MHz
itsybitsy32u4_5V ATMEGA32U4 16MHz 28KB 2.50KB Adafruit ItsyBitsy 5V/16MHz
$ pio init -b itsybitsy32u4_3V
●ATコマンドモードによるHC-06モジュールの設定
HC-02ではラズベリーパイに繋いで簡単に設定できました。
HC-02(RXD,TXD,GND,VCC,KEY)→RaspberryPi(TX,RX,GND,3V,3V)。
番外編 mirco:bit 磁気・加速度センサ
しかし、HC-06ではラズベリーパイのデバイスモニターが反応しません。
そこで、ItsyBitsyにプログラムを書き込んで自動設定しました。
Raspberry Pi 3 model A に繋いでいます。
電源投入後、他のデバイスとペアリングされていない状態であれば常にATモードになっています。(赤色LEDが素早く点滅)
【setup.ino】
#define INTERVAL (50)
void atcommand(char *cmd)
{
long elapsed;
Serial.println(cmd);
Serial1.write(cmd);
while (!Serial1.available());
while (Serial1.available()) {
Serial.write(Serial1.read());
elapsed = 0;
while (!Serial1.available()) {
elapsed += INTERVAL;
delay(INTERVAL);
if (elapsed >= 500) break;
}
if (elapsed >= 500) break;
}
Serial.write(0x0a);
}
void setup()
{
Serial.begin(9600);
while (!Serial);
Serial1.begin(9600);
atcommand("AT");
atcommand("AT+VERSION");
atcommand("AT+NAMEhc_06_keyboard");
atcommand("AT+PIN5678");
atcommand("AT+BAUD6");
}
void loop() {}
●ソースコード解説
1. void setup()部分
Serial.begin(9600);
while (!Serial);
USBシリアル(ItsyBitsy←→RaspberryPi)の通信速度を9600に設定して、
インスタンスが生成されるのを待ちます。
Serial1.begin(9600);
HC-06の初期通信速度は9600です。(ItsyBitsy←→HC-06)
atcommand("AT");
接続を確認します。
atcommand("AT+VERSION");
バージョンを確認します。
AT+NAMEhc_06_keyboard
Bluetooth名を「hc_06_keyboard」に変更します。
AT+PIN5678
PIN番号を「5678」変更します。初期値は「1234」です。
AT+BAUD6
ボーレートを変更(9600→38400)します。
2. atcommand(char *cmd)部分
Serial.println(cmd);
Serial1.write(cmd);
発行したATコマンドをRaspberry Pi と HC-06に送信します。
HC-06には改行コードなしでコマンドを送信します。
while (!Serial1.available());
while (Serial1.available()) {
Serial.write(Serial1.read());
elapsed = 0;
while (!Serial1.available()) {
elapsed += INTERVAL;
delay(INTERVAL);
if (elapsed >= 500) break;
}
if (elapsed >= 500) break;
}
HC-06からの応答文字列を取りこぼさないように制御しています。
●実行
$ pio device list
/dev/ttyACM0
------------
Hardware ID: USB VID:PID=239A:800D LOCATION=1-1:1.0
Description: ItsyBitsy 32u4 3V 8MHz
/dev/ttyAMA0
------------
Hardware ID: 3f201000.serial
Description: ttyAMA0
$ pio run -t upload
ビルドします。
$ pio device monitor -p /dev/ttyACM0 -b 9600
PlatformIOのデバイスモニタに接続します。
再起動後は通信速度が38400に変更されます。
※HCシリーズのATコマンド仕様は機種により異なるのでデータシートで確認してください。
●補足*ItsyBitsy 32u4 修復
フューズビットが破損して、プログラムをアップロードできなくなったときの忘備録です。
avilleret/Burn_Caterina_Bootloader_to_ItsyBitsy
OPEN-SMARTのUNO R3を使ってます。スイッチで3.3Vと5V駆動を切り替えることができます。今回は3.3Vで使用。
1. Arduino UNO にArduinoISPプログラムを書き込みます。
2. Arduino UNO と ItsyBitsy を接続します。
Arduino | ItsyBitsy
3V3 | 3V
GND | GND
6(10) | RST (reset)
11 | MOSI
12 | MISO
13 | SCK
※Arduino側のRESETピンはソースコードを書き替えて6番ピンにしています。通常は10番ピンです。
3. ブートローダーをダウンロードします。
https://learn.adafruit.com/introducting-itsy-bitsy-32u4/downloads
4. フューズをセットアップします。
$ ~/.platformio/packages/tool-avrdude/avrdude -C ~/.platformio/packages/tool-avrdude/avrdude.conf -c avrisp -P /dev/ttyUSB0 -b 19200 -p m32u4 -U lfuse:r:low_fuse_val.hex:h -U hfuse:r:high_fuse_val.hex:h
5. ブートローダーを書き込みます。
$ ~/.platformio/packages/tool-avrdude/avrdude -C ~/.platformio/packages/tool-avrdude/avrdude.conf -c avrisp -P /dev/ttyUSB0 -b 19200 -p m32u4 -U flash:w:Caterina_itsybitsy3V.hex
※ビルドしたファイルは、.pio/build/itsybitsy32u4_3V/firmware.hex として保存されるので、ブートローダと同様にflashに書き込むことも可能です。
$ ~/.platformio/packages/tool-avrdude/avrdude -C ~/.platformio/packages/tool-avrdude/avrdude.conf -c avrisp -P /dev/ttyUSB0 -b 19200 -p m32u4 -U flash:w:.pio/build/itsybitsy32u4_3V/firmware.hex
また、ルールを追加する必要があるかもしれません。
$ cd /etc/udev/rules.d
$ ls
60-rp2040.rules 99-com.rules 99-platformio-udev.rules
$ sudo wget https://github.com/adafruit/Trinket_Arduino_Linux/raw/master/99-adafruit-boards.rules
$ ls
60-rp2040.rules 99-adafruit-boards.rules 99-com.rules 99-platformio-udev.rules
$ sudo udevadm control --reload-rules
Ref.
Using the Arduino IDE on the Raspberry Pi for AdaFruit’s Boards.
●Bluetoothループバックテスト
設定が完了したところで、ソースコードを書き替えます。
Bluetooth接続した相手からの入力文字列をそのまま返すループバックテスト用のプログラムです。
void setup()
{
Serial1.begin(38400);
}
void loop() {
if (Serial1.available()) Serial1.write(Serial1.read());
}
WINDOWSパソコンから Bleutoothデバイスの追加を行ってみます。
ペアリングします。設定変更した、PINコードを入力します。
メニューバーの[WINDOWS]アイコンを右クリック→デバイスマネージャー
ペアリングが完了するとデバイスマネージャーのポート(COMとLPT)に仮想COMポートが追加されます。
追加されたCOMポートを右クリック、プロパティを選択します。
BAUDRATE(ビット/秒)から38400を選択します。
先程のデバイスマネージャーの画面から[操作]→[デバイスとプリンター]を選択します。
hc_06_keyboardを右クリックして、[プロパティ]を選択します。
[サービス]タブをクリックします。
Bluetoothサービス・シリアルポート(SPP)'Port'をチェックします。
TeraTermを起動して、COMポート経由で接続します。
[設定]→[シリアルポート]を選択します。
スピードに 38400 を選択します。
HC-06の赤色点滅から点灯に変わります。
画面から12345と打ち込むとそのまま入力文字がループバックされて表示されます。
●HID Keyboard
それでは、Amega32u4マイコンを仮想キーボードとして利用します。
$ pio pkg search "header:Keyboard.h"
arduino-libraries/Keyboard
Library ~ 1.0.4 ~ Published on Thu May 5 12:36:32 2022
Allows an Arduino board with USB capabilities to act as a Keyboard. This library plugs on the HID library. It can be used with or without other HID-based libraries (Mouse, Gamepad etc)
$ vi platformio.ini
[env:itsybitsy32u4_3V]
platform = atmelavr
board = itsybitsy32u4_3V
framework = arduino
lib_deps =
arduino-libraries/Keyboard
この設定でビルドすると、~/ItsyBitsy32u4/.pio/libdeps/itsybitsy32u4_3V/Keyboard/src に
ライブラリーがインストールされます。
$ ls ~/ItsyBitsy32u4/.pio/libdeps/itsybitsy32u4_3V/Keyboard/src
Keyboard.cpp KeyboardLayout_es_ES.cpp Keyboard_es_ES.h
Keyboard.h KeyboardLayout_fr_FR.cpp Keyboard_fr_FR.h
KeyboardLayout.h KeyboardLayout_it_IT.cpp Keyboard_it_IT.h
KeyboardLayout_da_DK.cpp KeyboardLayout_sv_SE.cpp Keyboard_sv_SE.h
KeyboardLayout_de_DE.cpp Keyboard_da_DK.h
KeyboardLayout_en_US.cpp Keyboard_de_DE.h
プログラム作成時、Keyboard.cpp, Keyboard.h、KeyboardLayout_en_US.cppの内容を参考にします。
#include <Keyboard.h>
char buf[32];
void setup()
{
Serial1.begin(38400);
Keyboard.begin();
}
void loop()
{
byte key, key1, key2, key3;
while(Serial1.available()) {
key = 0x00;
key1 = Serial1.read(); delay(10);
key2 = Serial1.read(); delay(10);
key3 = Serial1.read();
switch(key1) {
case 0x0d: key = 0x0a; break;
case 0x1b:
key = KEY_ESC;
if (key2==0x5b) {
switch(key3) {
case 0x41: key = KEY_UP_ARROW; break;
case 0x42: key = KEY_DOWN_ARROW; break;
case 0x43: key = KEY_RIGHT_ARROW; break;
case 0x44: key = KEY_LEFT_ARROW; break;
}
}
break;
case 0x01: // ネットワーク設定
Keyboard.write("sudo vi /etc/netplan/50-cloud-init.yaml",39);
Serial1.println("sudo vi /etc/netplan/50-cloud-init.yaml");
break;
default: key = key1; break;
}
if (key) Keyboard.write(key);
sprintf(buf,"[0x%02x] 0x%02x:0x%02x:0x%02x\r\n", key, key1, key2, key3);
Serial1.print(buf);
}
delay(10);
}
●コードの要点
TeraTerm を利用してBluetooth通信を行う場合、日本語キーボード独特のコード体系はパソコン側のキーボード・ドライバにより吸収されるため、
文字や記号は見た目と同じアスキーコードとして送信され、そもそも文字化けは発生しません。
プログラムでは、[ESC][↑][↓][←][→]などの制御コードをHIDキーコードへの変換を行います。
制御キー | 送信されるデータ | HIDキーコード |
[ESC] | [0x1b] | KEY_ESC |
↑ | [0x1b][0x5b][0x41] | KEY_UP_ARROW |
↓ | [0x1b][0x5b][0x42] | KEY_DOWN_ARROW |
→ | [0x1b][0x5b][0x43] | KEY_RIGHT_ARROW |
← | [0x1b][0x5b][0x44] | KEY_LEFT_ARROW |
このように矢印キーを押したときには3バイトの制御データが送信されてきます。
HIDキーコードを下記で確認できます。
$ cat ~/ItsyBitsy32u4/.pio/libdeps/itsybitsy32u4_3V/Keyboard/src
// Misc keys
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2
#define KEY_TAB 0xB3
#define KEY_RETURN 0xB0
#define KEY_MENU 0xED
#define KEY_ESC 0xB1
........
プログラム内での処理は下記のようになります。
byte key, key1, key2, key3;
while(Serial1.available()) {
key = 0x00;
key1 = Serial1.read(); delay(10);
key2 = Serial1.read(); delay(10);
key3 = Serial1.read();
switch(key1) {
case 0x0d: key = 0x0a; break;
case 0x1b:
key = KEY_ESC;
if (key2==0x5b) {
switch(key3) {
case 0x41: key = KEY_UP_ARROW; break;
case 0x42: key = KEY_DOWN_ARROW; break;
case 0x43: key = KEY_RIGHT_ARROW; break;
case 0x44: key = KEY_LEFT_ARROW; break;
}
}
break;
default: key = key1; break;
}
if (key) Keyboard.write(key);
}
switch()文のdefault部分が通常の文字・記号の処理です。
Ubuntu Server の初期インストールの様子です。
Raspberry Pi 3 model B+ にHDMIモニターを接続、ノートパソコンのキーボードを使って、TeraTerm・仮想キーボード経由で入力しています。
●注意点とカスタマイズ
HID KEYBOARD では、ASCIIコード中の制御コード0x00~0x07,0x0B~0x1F,0x7fが無効です。つまり、 [CTRL]+C などは使えません。
ネットワーク設定の際に、pingコマンドなどを発行すると停止できなくなってしまいますので注意しましょう。
しかし、これを逆手に取ると便利な機能を追加できます。例えばキーボードで[CTRL] + a を押すと、0x01 が送信されます。
これにネットワーク設定ファイルを開くコマンドを付与できてしまいます。
case 0x01: // ネットワーク設定
Keyboard.write("sudo vi /etc/netplan/50-cloud-init.yaml",39);
break;
この要領で多くのコマンドを登録することが可能です。
仮想キーボードはとても小さいので、文字化け対策に英語キーボードを購入するよりも便利かもしれません。
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
Arduinoで学ぶ組込みシステム入門(第2版)
●Arduinoを使って組込みシステム開発を理解する
・ハードウェアやソフトウェアなどの基礎知識/
・設計から実装までを系統的に説明するモデルベース開発/
・Arduinoを用いた実際の開発例
最新 使える! MATLAB 第3版
◆◆すぐに「使える!」 全ページフルカラー!◆◆
・MATLAB R2022bに対応し、解説もより詳しく!/
・コマンド・スクリプトの例が豊富で、動かして学べる!/
・超基本から解説。これから使いはじめる人にぴったり!/
・全編フルカラー、スクリーンショットも豊富!
Amazon Web Services基礎からのネットワーク&サーバー構築改訂4版
1.システム構築をインフラから始めるには/
2.ネットワークを構築する/
3.サーバーを構築する/
4.Webサーバーソフトをインストールする/
5.HTTPの動きを確認する/
6.プライベートサブネットを構築する/
7.NATを構築する/
8.DBを用いたブログシステムの構築/
9.TCP/IPによる通信の仕組みを理解する
C言語は第二の母国語: 独学学生時代から企業内IT職人時代に培った、独立のための技術とノウハウ 平田豊著
学生時代から独学でプログラミングをはじめ、企業内でデバイスドライバを開発し、そして独立後もたくさんのアプリケーション開発や技術書制作に携わってきた著者。その筆者が大事に使い続ける「C言語」の“昔と今”について、気づいたことや役立つ知識、使ってきたツールなどについて、これまで記してきたことを整理してまとめました。
本書では、現役プログラマーだけでなく、これからプログラミングを学ぶ学生などにも有益な情報やノウハウを、筆者の経験を元に紹介しています。
1冊ですべて身につくJavaScript入門講座
・最初の一歩が踏み出せる! 初心者に寄り添うやさしい解説
・最新の技術が身につく! 今のJavaScriptの書き方・使い方
・絶対に知っておきたい! アニメーションとイベントの知識
・プログラミングの基本から実装方法まですべて学べる
図解! Git & GitHubのツボとコツがゼッタイにわかる本
ソフトウェア開発では欠かすことのできないGit、GitHub。
これからGit、GitHubを使いたいという入門者の方でも、実際に手を動かしながら使い方を学べます。
C自作の鉄則!2023 (日経BPパソコンベストムック)
メーカー製のパソコンはスペックが中途半端で、自分が本当に欲しい機種がない――。そう思っている人には、ぜひ自作パソコンをお薦めします。自作パソコンのパーツは進化が速く、しかも驚くほど種類が豊富。価格も性能も、幅広く用意されているため、満足度100%の“自分だけの1台”を手に入れることができます。
Interface 2023年6月号
特集:第1部 フィルタ設計 基礎の基礎/
第2部 係数アプリや波形観測アプリで合点!FIR&IIRフィルタ作り/
第3部 配布プリント基板で体験!マイコンで動くフィルタ作り
日経Linux 2023年5月号
【特集 1】 AI時代の最強フリーソフト ~ 25のやりたいを実現!
【特集 2】 AWS、Azureのうまみを無料で体感!面倒なことはクラウドに任せよう
【特集 3】 新しいRaspberry Pi Cameraで遊んでみよう
【特集 4】 Linuxで旧型PCを復活! 1kg切るモバイルPCを「ChromeOS Flex」でChromebook化
ラズパイマガジン2022年秋号
特集:5大人気ボード 電子工作超入門
「半導体不足で在庫が不足し、電子工作のボードがなかなか買えない…」。そんな今にふさわしい特集を企画しました。5種の人気ボードにすべて対応した電子工作の入門特集です。「GPIO」や「I2C」を使った電子パーツの制御方法は、どのボードでも同じです。手に入れられたボードを使って、今こそ電子工作を始めましょう。
地方で稼ぐ! ITエンジニアのすすめ
学歴、理系の知識、専門スキル……全部なくてもITエンジニアになれる!
地方でも高収入でやりがいをもって働ける!ITエンジニアの魅力を一挙大公開
Raspberry Piのはじめ方2022
本書は、ラズパイやPicoの買い方やインストール、初期設定といった基本から、サーバー、電子工作、IoT、AIといったラズパイならではの活用方法まで、1冊でお届けします。
ラズパイをこれから始める方向けに、全36ページの入門マンガ「女子高生とラズベリーパイ」も巻末に掲載。これを読むだけでラズパイがどんなものなのか、すぐに分かって触れるようになります。
ハッカーの学校 IoTハッキングの教科書
生活にとけこみ、家電機器を便利にするIoT技術。
Webカメラなど、便利の裏側に潜むセキュリティの危険性をハッキングで検証。
専門家がパケットキャプチャからハードウェアハッキングまで、その攻撃と防御を徹底解説。
本書は2018年7月に刊行された「ハッカーの学校IoTハッキングの教科書」に一部修正を加えた第2版です。
攻撃手法を学んで防御せよ! 押さえておくべきIoTハッキング
本書は、経済産業省から2021年4月にリリースされた、IoTセキュリティを対象とした『機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き』の『別冊2 機器メーカに向けた脅威分析及びセキュリティ検証の解説書』をもとに、IoT機器の開発者や品質保証の担当者が、攻撃者の視点に立ってセキュリティ検証を実践するための手法を、事例とともに詳細に解説しました。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
プログラマーは世界をどう見ているのか 西村博之著
イーロン・マスク(テスラ)、ジェフ・べゾス(Amazon)、ラリー・ペイジ(Google)…etc.
世界のトップはなぜプログラマーなのか?
ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場!
高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。
DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。
作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。
Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。
この本では,ベイズ統計学のきほんをやさしく紹介していきます。
白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81
無水エタノールP 500mlx2個パック(掃除)
ケイバ(KEIBA) マイクロニッパー MN-A04
サンハヤト SAD-101 ニューブレッドボード
白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02
[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠
|