XIAO ESP32C3を使ってみる⑤〜ブラウザからリクエストしてLEDをONOFF
XIAO ESP32C3を使ってみる記事。
kana-yaz.hatenablog.jp
kana-yaz.hatenablog.jp
kana-yaz.hatenablog.jp
kana-yaz.hatenablog.jp
Webサーバーを使ってLEDをON/OFFさせてみる
せっかくのESP32系なので、IoTっぽいことをしてみましょう。
Webサーバーへのリクエストに応じて、LEDを点けたり消したりしてみます。
前回のHelloServerをベースに改造してみます。
リクエストの最後に"/ledon"でLEDを点灯、"/ledoff"でLEDを消灯させてみます。
コード
#include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h> #define LED_PIN D10 const char* ssid = "ssid"; //SSIDを指定 const char* password = "password"; //キーを指定 WebServer server(80); void handleRoot() { digitalWrite(LED_PIN, 1); server.send(200, "text/plain", "hello from esp32!"); digitalWrite(LED_PIN, 0); } void handleNotFound() { digitalWrite(LED_PIN, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(LED_PIN, 0); } void setup(void) { pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, 0); Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin("esp32")) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.on("/inline", []() { server.send(200, "text/plain", "this works as well"); }); server.on("/ledon", []() { digitalWrite(LED_PIN, 1); //LEDをONにする server.send(200, "text/plain", "LED ON!"); }); server.on("/ledoff", []() { digitalWrite(LED_PIN, 0); //LEDをOFFにする server.send(200, "text/plain", "LED OFF!"); }); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop(void) { server.handleClient(); delay(2);//allow the cpu to switch to other tasks }
結果
XIAO ESP32C3を使ってみる④〜HelloServer
XIAO ESP32C3を使ってみる記事。
kana-yaz.hatenablog.jp
kana-yaz.hatenablog.jp
kana-yaz.hatenablog.jp
Webサーバーにしてみる
せっかくのESP32系ですので、まずはWebサーバーにしてみましょう。
ライブラリ標準の"Hello Server"をベースに、ステータスLEDのピン宣言部分だけ変えてみます。
const int led = 13;
int型になっているので
#define LED_PIN D10
#defineにかえておきました
コード
#include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h> #define LED_PIN D10 //サンプルから変更 const char* ssid = "ssid"; //SSIDを指定 const char* password = "password"; //キーを指定 WebServer server(80); void handleRoot() { digitalWrite(LED_PIN, 1); server.send(200, "text/plain", "hello from esp32!"); digitalWrite(LED_PIN, 0); } void handleNotFound() { digitalWrite(LED_PIN, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(LED_PIN, 0); } void setup(void) { pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, 0); Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin("esp32")) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.on("/inline", []() { server.send(200, "text/plain", "this works as well"); }); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop(void) { server.handleClient(); delay(2);//allow the cpu to switch to other tasks }
結果
シリアルモニタに出力されたIPを叩いて、表示されたらOkayですね
XIAO ESP32C3を使ってみる③〜PWMでBeep編
XIAO ESP32C3を使ってみる記事。
Beep音を鳴らしてみる
予定しているアプリケーションで使いたいので、PWMを使ってBeep音を鳴らしてみます。
従来のESP32だと”ESP8266Audio”と内蔵DAC、トランジスタあたりの組み合わせをよく使っていたのですが、ESP32C3はDACを内蔵していないですので
、PWMを使ったBeepで簡易に済ませちゃいます。
コード
#define BUZZ_PIN D0 // ブザーのピン番号 #define BUZZ_CH 0 // ブザーのチャネル番号 #define BEAT 500 // 音の長さ(0.5秒間隔) void setup() { delay(BEAT*4); //ちょっとディレイ ledcSetup(BUZZ_CH, 12000, 8); //ledcの初期化 ledcAttachPin(BUZZ_PIN, BUZZ_CH); //ピンの初期化 ledcWriteTone(BUZZ_CH, 262); // ド delay(BEAT); ledcWriteTone(BUZZ_CH, 294); // レ delay(BEAT); ledcWriteTone(BUZZ_CH, 330); // ミ delay(BEAT); ledcWriteTone(BUZZ_CH, 349); // ファ delay(BEAT); ledcWriteTone(BUZZ_CH, 392); // ソ delay(BEAT); ledcWriteTone(BUZZ_CH, 440); // ラ delay(BEAT); ledcWriteTone(BUZZ_CH, 494); // シ delay(BEAT); ledcWriteTone(BUZZ_CH, 523); // ド delay(BEAT); ledcWriteTone(BUZZ_CH, 587); // レ delay(BEAT); ledcWriteTone(BUZZ_CH, 659); // ミ delay(BEAT); ledcWriteTone(BUZZ_CH, 698); // ファ delay(BEAT); ledcWriteTone(BUZZ_CH, 784); // ソ delay(BEAT); ledcWriteTone(BUZZ_CH, 880); // ラ delay(BEAT); ledcWriteTone(BUZZ_CH, 988); // シ delay(BEAT); ledcWriteTone(BUZZ_CH, 1049); // ド delay(BEAT); ledcWriteTone(BUZZ_CH, 0); // 消音 } void loop() { }
結果
ヨシ!
www.youtube.com
XIAO ESP32C3を使ってみる②〜Lチカ編〜
XIAO ESP32C3を使ってみる記事。
Lチカしてみる
お作法らしいので、Lチカしてみる。
XIAO ESP32C3にはオンボードLEDがありませんので、適当なLEDをつないでみます。
コード
#define LED_PIN D10 //LEDピン void setup() { //ピンの初期化 pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(500); digitalWrite(LED_PIN, LOW); delay(500); }
結果
ヨシ!
www.youtube.com
XIAO ESP32C3を使ってみる①~紹介と環境構築~
待ってた
Seeed社のXIAO ESP32C3の国内販売が開始されたので、お迎えしてきました。Seeed社の新製品って、発売日数日以内に入手しないとしばらく手に入らないのがつらいんですよね。
って感じでした。秋月の店頭で無事捕獲。しばらくしたら安定入荷すると思うけど。
これはなに?
スペックなど
詳細はココに譲るとして
CPU | ESP32-C3 32-bit RISC-V @160MHz |
無線 | Wi-Fi(2.4G帯),Bluetooth5.0(BLE) |
メモリ | 400KB SRAM,4MB Flash |
センサ | なし |
インターフェース | 1x UART, 1x I2C, 1x I2S, 1x SPI,11x GPIO(PWM), 4x ADC |
電源 | Type-C,充電回路付 |
という感じ。待ちに待った「充電回路入りの小さいESP系」ってとこですか。
DACやBUILTIN-LEDがない、といったところはアプリケーションによっては困るかもしれませんが、DACはI2Sでカバーできるでしょうし、BUILTIN-LEDはLチカぐらいしかしないでしょうし…。
比較
似たような子たちと比較してみる。もちろんメインのマイコンチップによる違いはあるので、user-friendliness的な視点での比較。Wi-Fi載ってる云々やメモリ容量とかは抜きで。
一長一短ですけど、今までのXIAOたちでできることは賄えそうな感じ。
ESP32系と比較すると、性能を犠牲&DACがないものの、LiPo充電回路が載ってるのは大きい。
M5 Atom、M5 Atomの中の人、最近よく使ってる充電モジュール、当該と比較してみるとこんな感じ。充電回路を外部付けすると、せっかくの小ささが死んでしまいますよね。
小さいESP他機種と
有利 | 不利 | |
---|---|---|
v.s. M5 Atom | ・LiPoの充電回路 ・外装がないので組込やすい ・外部アンテナ |
・GROVE端子でサクッと遊べない ・DACがない ・汎用ボタンがない ・LEDが載ってない |
v.s. STAMP-PICO-Mate | ・LiPoの充電回路 ・USBシリアルが載っている ・Type-Cから電源をブチ込める |
・GROVE端子でサクッと遊べない ・DACがない ・汎用ボタンがない ・LEDが載ってない |
各種XIAOと
有利 | 不利 | |
---|---|---|
v.s. XIAO SAMD21 | ・LiPo充電 ・I2Sがある ・リセットボタンがある |
・Python使えない ・LED載ってない |
v.s. XIAO RP2040 | ・LiPo充電 ・I2Sがある |
・Python使えない ・LED載ってない ・USBStorageとして認識されない |
v.s. XIAO nRF52840 (Sense) | ・I2Sがある ・ボタンが押しやすい(重要) |
・Python使えない ・PDM/6DOF-IMUが載ってない ・AnalogI/Oが少ない ・LED載ってない |
開発環境を作る
1.[ファイル]→[環境設定]の「追加のボードマネージャのURL」に以下をコピペ
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
2.[ツール]→[ボード]-[ボードマネージャ]から"esp32"で検索し、2.0.4以降をインストール
すっごく奥深くにいますね…というよか、ESP32系、増えましたね…。
今回はここまで。
続きとか
「おうちカレーのレシピ教えて?」と言われて
知人に「おうちカレーのレシピを教えて欲しい」と言われましたので、メモしておきます。
分量とか計ったこともないし、大体ありもので適当に作るのが「おうちカレー」なんだけどなー、とは思いつつも、
普段作ることが多いレシピにあわせてみました。そして分量がわかんないので、実際に作ってメモしました。
原材料
- おにく…300-400gぐらい
鶏むね、牛ステーキ肉、豚白モツ、豚ブロックあたり - じゃがいも…中3個
- たまねぎ…中1個
- にんじん…中1本
- きのこ類…適量
エリンギか舞茸、しめじが多い - トマト缶…1缶
- カレー粉…大さじ3+小さじ1と1/2
今はアナンのカレーパウダーを使ってます
- 小麦粉…小さじ3
- チキンブイヨン…2つ
うちはチキンブイヨンばかり使うのですが、コンソメでもいいと思います - ナツメグ…少し ※チキンの場合不要
- クミン…少し ※チキンの場合不要
- 生唐辛子…1本
- 塩、胡椒…少し
- 生姜…1つ ※チキンの場合不要
- 白ワイン…150ml
- トリイのウスターソース…大さじ2
トリイがなければ、ウスターソース大さじ1に醤油大さじ1 - ケチャップ…大さじ1
うちはハインツなのですが、カゴメとかなら小さじ1くらいでもいいかも
工程
肉の下準備
お肉は一口大に切り、チキンなら塩と胡椒を軽く振り、その他だったら塩、胡椒、ナツメグ、クミンを軽く振り、数分なじませる。ナツメグやクミンがないなら、ハーブソルトで代用してもいい。
キッチンポリにおにく、小麦粉を小さじ2、カレー粉を小さじ1+1/2と入れ、軽くフリフリしたあとに5〜10分なじませる。
モツや豚ブロックを使う場合は、事前に下茹でしておく。生姜、ネギの青いところ、白ワインで下処理したり、事前に軽く圧をかけておくといいかも。野菜の下準備
じゃがいも、にんじんは一口大、玉ねぎと生姜は荒みじん。きのこ類も一口大。個人的に、じゃがいもは大きめ、にんじんは乱切りが好き。
じゃがいもとにんじんは耐熱皿に入れ、半分隠れるくらいのお水を入れて、レンジ600Wで2分。終わったらザルにあげてさっと表面を水で流す。
玉ねぎはオリーブオイルで炒める。自分は甘すぎるのが嫌いなので飴色までは炒めない。ここらへんはお好みで。炒める
オリーブオイルをフライパンで熱し、生姜を軽く炒める。夏場ならにんにくチップでも。
両面に軽く焼き目がつくまでおにくを焼く。
じゃがいも、にんじんを表面が透き通るまで炒める。あらかた火が通ったら、きのこ類もあわせて炒める。生唐辛子はちぎってここで投入。煮る
圧力鍋を軽く温める。炒めた具材を油ごと圧力鍋へ。炒めた玉ねぎもここで。トマト缶と白ワイン、チキンブイヨンを投入。
圧力がかかったら、弱火で10分煮込んだあと、圧力が抜けるまで放置。
味付け
カレー粉大さじ3、小麦粉小さじ1、ソース大さじ2、ケチャップ大さじ1を投入。
弱火でとろみがつくまでかき混ぜながら煮込む。味の調整はカレー粉、塩コショウで適当に。
感想
はじめてテキスト化したのですが、こうしてみると結構違うね?
Nさん、これでいいの?いつものカレーこんな感じなんだけど、大丈夫?記事になる?
トリイソースについて
何の躊躇いもなく「トリイのウスターソース」と記載したので、軽く補足。
トリイソースは静岡県浜松市の地ソースでして、特徴としては…おいしい(語彙力)
www.torii-sauce.jp
スパイスやお酢のトゲがなく、すごくまろやか。 そして「ソースと醤油の間みたい」って仰る方が多いのですが、おダシの味がほのかにするんです。 お魚とか、天麩羅なんかにも合うんですよね。 目玉焼き醤油派と目玉焼きソース派の抗争を鎮めるためにも使えますね。
購入は直販、もしくは浜松市ならスーパーで売ってます。
www.torii-sauce.jp
都内だと日本百貨店に置いてますかね。自分は秋葉原の「しょくひんかん」でいつも買っています。
nippon-dept.jp
Amazonにもありますけど…高ぇよ…。
ATOM Matrix のLEDマトリクスの使い方
ATOM Matrix のLED関連の概念について
公式ドット絵ツールATOM Pixel Tool
を使って作成したアイコン類の表示についてのメモ。
void animation()
とかvoid displaybuff()
で使うやつ。
ATOM Pixel Toolの使い方
色を選んでポチポチして絵を描く。
編集が終わったら、[TOOLS]→[SAVE]で保存する。
画像データはunsinged char
で吐き出されるので、使うコードにコピペ。
複数のアイコンなどを表示するとき
6つのアイコンを表示させたければ、ATOM Pixel Toolのパレットサイズ、W
を30
にすればいい。
要するに、5×表示させたいアイコン数
表示するアイコンを指定するには
displaybuff()
を使うと表示ができる。
displaybuff(uint8_t *buffptr, int8_t offsetx = 0, int8_t offsety = 0)
* buffptr:画像データ(配列)
* オフセット(W)
* オフセット(H)
位置の指定に関してはあくまでもオフセット位置なので、例えば、
* 一番左のアイコン → offsetx = 0
* 次のアイコン → offsetx = -5
* 今度のアイコン → offsetx = -10
となる。
順繰りに表示するサンプル
#include <M5Atom.h> int iPos=0; const unsigned char image_default[602]={ /* width 040 */ 0x28, /* height 005 */ 0x05, /* Line 000 */ 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, // /* Line 001 */ 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, // /* Line 002 */ 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0xff,0x00,0x7f, 0xff,0x00,0x7f, 0x00,0x00,0x00, // /* Line 003 */ 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, // /* Line 004 */ 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, // }; void setup() { Serial.begin(115200); M5.begin(true, false, true); M5.dis.displaybuff((uint8_t*)image_default, iPos, 0); } void loop() { iPos=iPos-5; if(iPos<-40){ iPos=0; } M5.dis.displaybuff((uint8_t*)image_default, iPos, 0); delay(500); M5.update(); }
ハートふわふわサンプル(位置指定して表示)
#include <M5Atom.h> const unsigned char image_default[602]= { /* width 040 */ 0x28, /* height 005 */ 0x05, /* Line 000 */ 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, // /* Line 001 */ 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, // /* Line 002 */ 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0xff,0x00,0x7f, 0xff,0x00,0x7f, 0x00,0x00,0x00, // /* Line 003 */ 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, // /* Line 004 */ 0xff,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x00, 0x00,0x00,0x00, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x55,0xaa,0xff, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0xff,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0xff,0x00,0x7f, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, // }; void setup() { Serial.begin(115200); M5.begin(true, false, true); M5.dis.displaybuff((uint8_t*)image_default, iPos, 0); } void loop() { M5.dis.displaybuff((uint8_t*)image_default, -30, 0); delay(500); M5.dis.displaybuff((uint8_t*)image_default, -35, 0); delay(500); M5.update(); }
ATOM Matrix についてのメモ(2020/06/08現在)
ATOM Matrix
これはなに?
M5 Stack シリーズの新型。
ESP32-picoが入った、とても小さい開発モジュール。
24mm x 24mm でとても小さい。江戸間でいうと0.0004畳くらい。
イケてんの?
USB Type-C
ESP32 PICOベース
4 MBフラッシュメモリ
2.4G SMDアンテナ:Proant 440
MPU6886 6軸センサ
25 x RGB LED(WS2812B)
1 x 赤外線LED
1 x プログラム可能なボタン
1 x リセットボタン
6 x GPIOピン
Grove互換インターフェース
プログラムプラットフォーム:Arduino、UIFlow
電源入力:5 V / 500 mA
動作環境温度:0 ~ 40 ℃
製品サイズ:24 x 24 x 14 mm
製品重量:14 g
技適あんの?
今のロットはあるみたいですね
どこで買えるの?
どうやって使うの?
- 公式のQuick Start
- 公式のGit Hub
- あとはここを参照して
- 公式のドット絵ツールは公式のGit HubにあるAtomPixTool.exeってやつ
気にしとくところ(2020/06/08現在)
- LEDのところを押し込むとボタンが押されたことになる。リセットボタン押しまくって、サンプル動かねーぞクソが、ってなった。ドキュメント読め自分。
- バッテリは内蔵してない。そのうちピンヘッダにつけるAdd-onsが出そう。
- FastLEDライブラリを入れるの忘れないようにする。
- Arduinoのライブラリマネージャからダウンロードされるライブラリが最新じゃなくて、
fillpix()
が利用できなかった。
M5Atom\src
内の M5Atom.h、30行目のvoid clear();
の上にvoid fillpix(CRGB Color);
を追加したらいけた。
この解決方法が合っているかはわからない - 公式のドット絵ツールがWindows版しかない。他のOSに対応したやつもそのうち出るんじゃないかな。知らんけど。
万年筆インクをひたすら消費する
万年筆インクは無限増殖する
万年筆インクって、使い切るのがなかなか難しいですよね。ボトルインクって、それなりに使っていても年単位で保つし、使い切らないのに他の色が欲しくなるし。n年前から使ってるiroshizukuの月夜。。
太いペンでも好きな色を使いたい
万年筆インクを他の用途に使うと言うと、思い付くのはローラーボールとかですよね。 エルバンのローラーボールとか便利。
エルバン ボールペン コンバーター付き スケルトン hb-pen08
- 発売日: 2017/02/03
- メディア: オフィス用品
ただ、水性インクのボールペンを使う文化がない方もいらっしゃいますよね。紙にしか書けないとか、汚れるとかで。 気分はアガるんだけどね、好きなインクを気軽に使えるボールペン。
気付かなかった
ヨドバシ行ってなんとなしにペンコーナーを見てたら、うまく使えそうなものがありましたね。これ。
プラチナ万年筆 採点ペン ソフトペン レッド SN-800Cパック#75
- メディア: オフィス用品
子供の頃に教師のデスクで見た、採点ペン。パッケージを見ると、万年筆用カートリッジって書いてある。これコンバーターいける???
純正コンバーターをブチ込む
さっそく買ってみましょう。これですね。
プラチナ 万年筆用 コンバーター【2個】コンバーター-500
- メディア: オフィス用品
うし
おら
問題ないですね
ドンキ格安ノート「MUGA」の上位モデルを使ってみた感想
インターネットでバズったドンキ格安ノート
年末に話題となった、ドンキホーテの19800円ノート「MUGA ストイックPC」。 何よりも19800円という格安価格に加えて、出来や品質に関してもいろいろと話題になったようで。
若い人たちのほとんどが自らのパソコンを持たなくなった現代で、こういった挑戦的な商品が出回ることはいいですね。 以前から格安の2in1やタブレットなども出していましたけど、こういった形で普通のラップトップが出回るとは。。
このクラスにはそこまでたくさんの製品はないのですが、やはり2万円前半というのは魅力的。 価格的には中華ノートがライバルになると思いますが、技適やPSEの問題もあるので、安心して使うことができないですよね。
- ASUS E200HA
- hp Stream 11
- Jumper Ezbook2
元モデルが格安放出されている
ドンキPCこと「MUGA」の元モデルこと、恵安「WiZBOOK KBM14HD」の修理上がり品が1万円台前半で売っているので、今回はそこらへんを触ってみます。
www.keian.co.jp
MUGA KNW14FHD-SL | KEIAN KBM14HD | |
---|---|---|
CPU | Intel ®ATOM x5-Z8350(Cherry Trail) | Intel ®ATOM x5-Z8350(Cherry Trail) |
メモリー | LPDDR3-2GB | LPDDR3-4GB |
ストレージ | eMMC 32GB | eMMC 32GB |
無線LAN | IEEE802.11b/g/n | IEEE 802.11a/b/g/n/ac |
ディスプレイ | 14.1インチ IPS 1920x1080 | 14.1インチ IPS 1920x1080 |
インカメラ | 30万画素 | 200万画素 |
カラー | シルバー | ブラック |
差異をまとめてみましたが、なんとも微妙なところでコストを抑えていますね。メモリー半分&Webカメラの画素数がかわっています。
メモリーが2GBになっているのは痛いですが、価格に直結するところですから、やむを得ないですかね。
「MUGA」は2万円切りというインパクトを重視した結果だと思います。
レビューなんて腐るほど掲載されていますし、製品のスペック自体もそこらへんのWindowsタブと大してかわりませんので、気になったところを適当にまとめてみます。
いいところ、ダメなところ
もちろんこの値段なので贅沢は言いません。普通に作業する分には十分な性能を持っていますね。 ただ日常使うに当たって気になる点はもちろんあります。
【いい】画面がものすごくきれい
このPCの売りなのがIPSのフルHD液晶というところ。映り込みはそれなりにあるんですが、高精細で発色も悪くない。 動画や写真なんかを見るには非常にいいんじゃないんでしょうか。【いい】意外とサクサク
動作はスムーズですね。さすが軽量なWindows10なだけあります。 もちろんあれもこれも、なんて言っていれば不満点が出るのは当然ですけど、軽めの作業であれば全然問題ない。
VisualStudioCode、ChromeでのYoutube視聴などは快適にこなします。Onedrive経由のOffice Onlineも問題ないですね。【ダメ】ヒンジがゆるい
ヒンジがやわいせいで、文書を売っているだけでディスプレイがゆらゆらします。 乗り物酔い的な感覚になるのはNGです。 軽量なLEDパネルの液晶&ヒンジのコストを削っているせいですけど、このクラスでかっちり作っているモデルを見たことがないですので、値段相応なのかもしれません。【ダメ】無理矢理感があるキーボード配列
日本語キーボードの金型を作るコストがねー、っといったところなんでしょうけど、これは絶望的にダメ。 特に[BS][Del][Return]あたりが致命的で、[Del]を誤爆しまくる&カッコを閉じようとして[Enter]を押してしまいます。
かといって、US配列のまま出すのも微妙ですので、【いい】割と広いキーボード 配列はともかくとしてキーピッチは19mm近く確保してありますので、この配列に慣れてしまえば、それなりにタイプできます。 薄さの問題もあるので底付き感があって疲れはしますが、少なくともメインエリアでの誤タイプはかなり少ないです。
【ダメ】タッチパッドが微妙
面積や反応自体は悪くない。いっちょ前に二本指スクロールとかにも対応しているので、機能的にも問題ない。 ただカーソル飛びと反応の悪さにストレスがたまります。 これはTrackPointに慣れている自分の感覚もあると思いますので、タッチパッドならそんなものなのかもしれません。【いい】お求め安い
この価格がすべてを許してくれますね。なにせ12000円です。ちょっといいところで飲み食いするのと同じ値段で入手できるんですから。 正規の値段で買うか?っていうと微妙なんですけど。
もしかしてここが不良だったの?
今回買ったのは修理再生品ですので、不具合があることは承知の上で購入しています。
何度か使っているうちに、特に何もしていないのにスリープに入ってしまう不具合に気づきました。
特に何のきっかけもなくスリープに入りまくるので、とてもイライラします。
イベントログを見ると、カバーを閉じたというイベントがひたすら記録されている。
ということで、電源設定からカバー閉じの動作を切ってみたところ、不意にスリープに入る問題は発生しなくなっています。
閉じるところのセンサーがダメなんですかね。
直ってねえじゃん。。
はたしてこれは誰向きのラップトップなの
これの下位モデル、ドンキで売っていいものなんだろーか?とは思います。パワーユーザーが割り切って使うのなら問題無い気はするんですけど、普通の方だったら何かあったときが不安だよなー、と。
ストレージもeMMCの32GBですから、普通のラップトップのようにいろいろインストールして使うことは難しいでしょう。WindowsUpdateですら難しい容量なんですから。
microSDHCをさしてシンボリックリンクを貼って、なんてやり方をすればある程度使えるようになる…かなとは思うんですが、一般の方はそこまでしないですよね。
Webサービスを利用するためのインターフェイスと見れば、Web閲覧、Webメール、ストリーミング動画視聴などは問題無くこなせます。 スマホテザリングやモバイルルーターを利用して出先で軽く使うとか、自宅のテレビが埋まってるときに動画を見る、自宅のパソコンが埋まってるときに軽い作業をする、とか。 スロットがmicroなのでカードリーダーが必要なのが微妙ですが、出先で写真をたくさん撮るシチュエーションでの撮影画像確認とかにも使えそうですね。カメラマンさんとかレイヤーさんとか。
というわけで
万人にすすめられるマシンでないことは確かです。メインとして使うには不十分。ストレージも容量が少ないですし、キーボード配列はおかしいし。
ただこの値段で買える&IPSだから液晶がきれいということは十分なメリットですので、その点が気に入ることができるのなら、ありですね。
そして。何かトラブルあっても泣かない。恵安だし。おけいあんだし。
パソコンの大先生はLinuxに入れ替えて云々言いますけど、それなりに使えるディストリってWindows10より重い気がするので、Windowsのまま使う方がいいと思います。
どうしても入れ替えたいんなら、Chroniumあたりがいいんじゃないんでしょうか。
あと、バラして基板を云々いうんだったら、メインボードだったらLattePanda、液晶だったら秋月のIGZOかAliで適当な液晶と変換基板買うか、eDPでつなぐことができるiPad液晶がいいと思います。