文字通り、裏をかかれた。今日は沖縄県地方の台風8号
で、M2だったから、本線も黄色進行で24時まであやち
がでてたから、てっきりM2と思ってたら、
https://www.youtube.com/watch?v=vxSyJT45L-A
ポン子のチャンネルで、いつも以上にスタッフが弾けて
大騒ぎになっている。本線に載らないからって、こんな
弾けてて良いのか?という疑問はおいておいて、後から
追いかけ再生中。M2だからと言って、気が抜けないな。
ESP32、ADCのサンプリング速度はいかほど?っていうのが
気になっているので、単純ループでぐるぐる回しながら
適当な数サンプリングしたら、どのくらいになるのかを
計測してみた。
でっち上げたスケッチはこんな。(例によって、不等号記号
は全角に変えてあるので、このスケッチ動かしてみようと
いう方は、半角に戻してからコンパイルしてください)
#include <driver/adc.h>
/* global variables */
#define LED 2
#define SAMPLES 2048
/* sub routine */
void prt_hex(int n, char c) {
for (int i = 1; i < 4; i++) {
if ( (n >> (4*i)) == 0) {
Serial.print(c);
}
}
Serial.print(n, HEX);
}
/* main process */
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
/* set up ADC1 parameters */
Serial.println();
Serial.println("----- adc width = 12 bits -----");
adc1_config_width(ADC_WIDTH_BIT_12);
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_0);
}
void loop() {
//int val[SAMPLES];
uint16_t val[SAMPLES];
Serial.println("start sampling.");
Serial.println();
digitalWrite(LED, HIGH);
/* input 1024 samples with simple loop */
unsigned long starttime = millis();
for (int i=0; <<SAMPLES; i++) {
val[i] = adc1_get_raw(ADC1_CHANNEL_0);
}
unsigned long endtime = millis();
digitalWrite(LED, LOW);
Serial.println("complete sampling.");
Serial.println();
Serial.print("start time = ");
Serial.print(starttime);
Serial.println("ms");
Serial.print("end time = ");
Serial.print(endtime);
Serial.println("ms");
Serial.print("total time = ");
Serial.print(endtime - starttime);
Serial.println("ms");
Serial.print("unit time = ");
Serial.print((endtime - starttime) * 1000 / SAMPLES);
Serial.println("us / sample");
Serial.print("sampling speed = ");
Serial.print(1000 * SAMPLES / (endtime - starttime));
Serial.println("sps");
for (int i=0; i<SAMPLES; i++) {
if ((i % 16) == 0 ) {
Serial.println();
prt_hex(i, '0');
Serial.print(" : ");
}
prt_hex(val[i], ' ');
Serial.print(", ");
}
Serial.println();
for (;;);
}
これを実行してみると、
こんな感じ。単純ループでは、25kspsくらいってこと
なのかな。
で、サンプルビット数を12から9に落としてみると、
ほとんど変わらない。数%向上するだけ…
なんだろうねぇ?ADC以外のところで、やたらと時間を
食っているのかねぇ?でも、GPIO制御とか使ってない
だろうしなぁ。なんだろう?
でも、12ビット精度でも、逆に言えば20ksps(10kHz)
くらいならナントカなるといえるのかもしれない。
気になるところが何点か。
ひとつは、データを取り込んでストックしておく
配列の領域、4kBを超えるとエラーになっちゃうっぽい。
2048サンプル×uint16_t(2バイト)とか、1024サンプル
×int(4バイト)とかだとokなんだけど、サンプル数を
この2倍とかにしたり、データ長を長くしたりすると
実行時にエラー吐いてしまうなぁ。
たしか、SRAMは512kB搭載していたはずなんだけど、
領域が分かれているのかな?へんな領域に押し込まれて
いて、実行時にちゃんとアクセスできなくてエラーに
なっているのかなぁ?
どんだけドでかいSRAM載ってても、さくっと配列を
作って置いておけるようじゃないと、色々こまるよな。
ESP32のArduinoまわり、調べても調べても、色々知りたい
情報までたどり着くのが大変なんだよな。触ってみて
初めてわかった。
あと、このスケッチで使っているアナログ入力回りの関数
は、多分ESP32の素のC言語用ライブラリで、いわゆる
ArduinoのanalogRead関数使ったりすると、また結果が
変わって来るんだろうと思うけど、その辺もちょっと
見比べてみたいんだよな。
https://twitter.com/macbs/status/1015903687766446080
QD。
Rubyというか、railsでSVG図形を扱いたいなぁと思って
探してみたんだけど、
http://d.hatena.ne.jp/oldfish/20101216/1292519919
Cairoがいいの?
https://techracho.bpsinc.jp/baba/2011_07_04/3713
RMagickはSVG対応しているの?
いくつか情報漁ってみたものの、なかなか良いところまで
行き着かなかった。
SVGの画像データ、xmlのままじゃなくて、簡単にファイル
として入出力したり、サーバ上のストレージに保存したり、
webページから眺められたり、もしくはBLOBとしてDBに
保存したり出来るのを期待しているんだけどな。
https://twitter.com/penta_twi/status/1015929682129088514
ゆるふわ系。
https://twitter.com/nied_inok/status/1016278562628759553
批判されないために取りやめたのか。つまり、被災者とか
犠牲者の人なんぞ、どうでもよいと。自分の人気取りに
資するものかどうか。典型的なサイコパスじゃない?
https://twitter.com/usa_hakase
カジノと、それに群がるお友達の財布の方が大事。
https://twitter.com/campintheair/status/1016561082469527552
こう見ると、なんか、リアル「ヨブ=トリューニヒト」と
いう気がしてくる。
地球教とは違う宗教を推しているみたいだけど。