昨年10月27日に行われた第4回A1CLUBストレートキーコンテストの結果がA1CLUBのホームページに発表されました。
結果はこちら。
当局JH7UBCはと見ると、昨年より1ランクアップの3位(7エリア1位)でした。
コンディションが悪い中、自分なりに頑張ったと思います。
交信いただいた各局、ありがとうございました。
2月16日追記
本日、ストレートキーコンテスト委員会からpdfファイルで、3位の表彰状が届きました。
ありがとうございました。
今年も頑張ろうと思います。
3月1日追記
昨年10月27日に行われた第4回A1CLUBストレートキーコンテストの結果がA1CLUBのホームページに発表されました。
結果はこちら。
当局JH7UBCはと見ると、昨年より1ランクアップの3位(7エリア1位)でした。
コンディションが悪い中、自分なりに頑張ったと思います。
交信いただいた各局、ありがとうございました。
2月16日追記
本日、ストレートキーコンテスト委員会からpdfファイルで、3位の表彰状が届きました。
ありがとうございました。
今年も頑張ろうと思います。
3月1日追記
ESP32の勉強もだいぶ進んできて、いよいよWiFiの接続テストをやってみます。
ArduinoやSTM32とESP32の大きな違いは、速度の速さ(クロック240MHz)とこのWiFiとBlurtooth機能です。
まずは、WiFiのサンプルプログラムで繋がるかどうかテストします。
Arduino IDEで、ファイル→スケッチ例→WiFiと進んで、「SinpleWiFiServer」というスケッチを選びます。
サンプルプログラムのssidとpasswordのxxxxxxxx部分に自分の家の無線LANルータのSSIDとパスワードを記入します。
--------------------------------------------------
#include
const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxxxx";
---------------------------------------------------
コンパイルしてESP32-DevKitCに書き込み。
Arduino IDEのシリアルモニタを開いて接続状況を確認します。
が、・・・・・・・・・・・・・ と表示され、いつまでもつながりません。
それではと、EN(RESET)ボタンを押して、ESP32-DevKitCの再起動をかけました。
今度は、モニタに
Connecting to SSID xxxxxxxxxxxx
・・・・・・
WiFi connected
IP address
nnn.nnn.n.n
と表示され、無事WiFiに接続できました。
GPIO5にLEDを接続してありますので、これをWiFi経由で点灯、消灯させてみます。
ブラウザ(Edge)を立ち上げ、URL記入欄に先ほど表示されたIPアドレスを
http://nnn.nnn.n.n/
と記入して、IPアドレスにアクセスすると
ブラウザに
とメッセージが表示されます。上の「here」をクリックするとLEDが点灯します。
下の「here」をクリックするとLEDが消灯します。
なるほど、なるほど。
これで、WiFiに繋がること、つまりインターネットに接続できることが確認できました。
こんな小さなボードがワールドワイドの世界に繋がっているんですね。すごい。
さて、これで何をやってみましょうか。
ESP32は、静電容量式のタッチセンサーを10個内蔵しています。(入力ピンT0~T9)
各ピンとGPIO番号の対応は次のようになっています。
T0 GPIO4
T1 GPIO0
T2 GPIO2
T3 GPIO15
T4 GPIO13
T5 GPIO12
T6 GPIO14
T7 GPIO27
T8 GPIO33
T9 GPIO32
主に使う関数だけテストしました。
タッチパッドの値を読み取る関数は
touchRead(uint8_t pin); //uint8_t pinは、GPIOの番号またはシンボル(T0~T9)
タッチセンサー割込み タッチパッドの値がしきい値(threshold)未満になったときに割込みをかける関数
touchAttacjInterrupt(uint8_t pin, ISR, uint_16 threshold); //pinはGPIO番号かシンボル、ISRは割込みがかかった時に実行する関数、割込みをかけるthresholdの値
まず、touchRead()で実際のタッチパッドの値を測定してみました。
T0のタッチパッドの値を1秒ごとにシリアルモニタに表示するスケッチです。
----------------------------
void setup(){
Serial.begin(115200);
}
void loop(){
Serial.println(touchRead(T0));
delay(1000);
}
----------------------------
タッチパッドの値は、
T0(GPIO4)にリード線も何もつけない状態のとき、88程度
T0にリード線をつけた状態で、79
リード線の先端の金属部分に触ったとき20以下でした。
タッチパッドをスイッチとして使う場合、しきい値(threshold)を50程度にすればよいようです。
そこで、リード線に触ったときにLEDが点灯するスケッチを描いてテストしました。
LEDは、GPIO27に接続します。タッチセンサーは、T0を使います。
-------------------------------
/*
* ESP32 Touch LED
* 2020.2.4
* JH7UBC Keiji Hata
*/
#define LED_Pin 27
void setup() {
pinMode(LED_Pin, OUTPUT);
}
void loop() {
if(touchRead(T0) < 50){
digitalWrite(LED_Pin, HIGH);
}else{
digitalWrite(LED_Pin, LOW);
}
}
-------------------------------
リード線に触るとLEDが点灯しました。
割込みについても次のようなスケッチでテストしました。
------------------------------------
/*
* ESP32 Touch interrupt test
* 2020.2.4
* JH7UBC Keiji Hata
*/
#define LED_Pin 27
//Interrupt Service Routine
void LED_Blink(){
digitalWrite(LED_Pin, !digitalRead(LED_Pin));
delay(500);
}
void setup() {
pinMode(LED_Pin, OUTPUT);
touchAttachInterrupt(T0, LED_Blink,50);
}
void loop() {
}
------------------------------------
リード線をチョン、チョンと触るとLEDが点灯、消灯を繰り返すのですが、触り続けると点灯しっぱなしになります。
安定して動作させるには、スケッチに工夫が必要なようです。
タッチセンサーは、いまのところあまり利用する予定がないので、動作を確認して終わりにしました。
ESP32のタイマー割込みについて、「ESP32 Timer 割込み」というキーワードで検索して、あちこちのサイトを見ながら勉強を始めたのですが、これがなかなか手強いというか、分からないことが多い。
よくまとまっているのが、「Arduinoで遊ぶページ」というサイトのこちらのページ。
ESP32は、2つのタイマーモジュールがあり、それぞれ2個の64ビットタイマーを持っているので、計4個のタイマーを使うことができます。
タイマー割込みを利用したLEDの点滅(いわゆるLチカ)の最も簡単なスケッチです。
LEDは、GPIO27に1kΩの抵抗を介して接続します。
割込みサービスルーチンでIRAM_ATTRと宣言すると、コンパイルされたコードは、ESP32の内部RAM(IEAM)に配置されます。これをしないとコードはフラッシュメモリに配置され、割込み時の処理が遅くなります。
timerBegin(0,80,true);は、タイマー0、分周比80、つまりこのタイマーのクロックは、80MHz/80=1MHz(1us)、countup
timerAttachInterrupt(timer, &LED_Blink, true);は、タイマー割込みがかかった場合、LED_Blink()を実行すること
割込みサービスルーチンをポインタで指名するんですね。&をとって、関数で呼んでもコンパイル実行してくれました。
この辺がよくわからない。
timerAlarmWrite(timer, 500000, true); 割込みタイミングの設定で、timerが500000カウントに達したときに割込みがかかります。つまり、1us×500000=500000us=500ms=0.5sごとに割込みがかかります。
0.5sごとに割込みサービスルーチンが呼ばれ、LEDの点灯と消灯が繰り返されます。
なお、各関数の詳細は、上記のサイトを参照ください。
-----------------------------------------
/*
* ESP32 Timer interrupt LED Blink
* 2020.2.3
* JH7UBC KeijiHata
*
*/
#define LED_PIN 27
hw_timer_t * timer = NULL; //timer 初期化
//割込みサービスルーチン
void IRAM_ATTR LED_Blink() {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
void setup() {
pinMode(LED_PIN, OUTPUT);
timer = timerBegin(0, 80, true); //timer=1us
timerAttachInterrupt(timer, &LED_Blink, true);
timerAlarmWrite(timer, 500000, true); // 500ms
timerAlarmEnable(timer);
}
void loop() {
}
-----------------------------------------
ブレッドボードです。
とりあえず、Lチカはできました。
でも、タイマー割込みは奥が深そうです。もう少し勉強しなければ・・・・・