はじめに
ほたー おはようございます こんにちは
今回は20日に取り組んだフリースタイルもくもく会の所感と成果をまとめました。
フリースタイルもくもく会はconnpassから参加しました。リンク先は下記のとおりです。
第91回【オンライン開催】フリースタイルもくもく会【学生歓迎!】
まず最初に所感、良かった点と反省点を書いていきます。次にもくもく会の成果を書いていきます。解説は少な目で実装できた箇所を坦々と書いていきます。最後に27日、28日の予定を書きます。
それではごゆっくりどうぞ
良かった点と反省点
- 自分以外にも取り組んでいる人がいると実感することですべきこと以外に興味がそれずに取り組めた
- Slackを3年ぶりに使って、自己紹介や本日やることなどのコミュニケーションをとることができた
- 外の暑さに煩わされることがなかった
- Discordでおしゃべりにも取り組んでいればより楽しくなった
- 最初2時間半もくもく会専用のチャンネルに入れていなかったので違和感を感じたら管理者に問い合わせた方がいい
自分以外の目があるということが一番大きかったです。取り組むこと、結果をヒトに伝えてリプライもらうことでモチベーションが上がっていると思いました。というより自宅から離れた場所で作業したり、誰かと取り組んでいる体だと何時間も同じ目標に集中できるという特徴を持っていると自覚しました。
Slackは3年前のTECH::EXPERTでメンターへのの連絡や本日の成果報告に使っていました。会社では使っていないのでずいぶんと期間が空きました。ログインステータスをアクティブ→離席中に切り替えることで「今自分は対応できませんよ」と伝えられるのがいいですね。
20日は雨がぽつぽつと降っており、仮に晴れていても汗びっしょりで到着するまでに疲れがたまる。なのでオンラインに切り替えてよかったと思いました。平日のオンラインイベントは19時からだったり時間が合わないことの方が多く、どうしても休日に参加せざるを得ません。今後はオンラインイベントにも興味を持ったら参加します。
反省点としましては最初2時間半うっかりもくもく会専用のチャンネルに入れていなかったことです。connpassの案内にも「当日11:00くらいまでに #online_mokumoku に入室ください。」と記載されていたのですが…。シャープがチャンネル名と気づいたのは管理者のnagaishiさんに注意を受けたときです。入った後に遅ればせながら自己紹介、本日取り組むことを書いて反応をもらいましたが、次はうっかりがないように注意したいものです。
あとDiscordっておしゃべりできるんですね、使う機会がなかったので知りませんでした。時間制限なくおしゃべり、次はメニューの中におしゃべりも入れます。もくもく会の最後に本日の成果を報告するのですがおしゃべりを取り上げているヒトもいて、自分も書きたかったと思いました。他人が自分のやるべきことに気づかせてくれる。
全くおしゃべりをしなかったわけではなく、もくもく会終了後に「離婚と財産」をテーマにエンジニアの婚活について話しました。マッチングアプリで異性と知り合った話など自分にも到来するかもしれない縁の話をしていて面白かったです。
良かった点と反省点については以上です。
もくもく会の成果
1. DS3231を用いた現在時刻の取得に成功した
・AWSアカウントを登録し、IAMユーザーの作成およびログインができた
・そのユーザーでEC2を起動させてセキュリティグループを登録してSSH接続することができた
・EC2内でPHP8.0とPostgreSQL14をインストールできた
・Ramboxというツールを参加者のogontaroさんから知ることができた
上の4つはセクションごとに分けて説明します。最後のRamboxについては窓の杜というサイトで「約700のWebアプリやオンラインサービスを1つのウィンドウに統合できるワークスペースオーガナイザー」と紹介されています。タコのようなアイコンが特徴です。
お気に入りのアプリ・サービスを1つのウィンドウにまとめられる「Rambox」がv2.0.0に(窓の杜)
自分は画像のようにタブを並べました。一番上がホーム画面、次に仕事用タブ、Gmail、Googleフォト、Twitter、Slack、Todoistと並んでいます。またCtrl + 数字キーを押すことでタブ間の移動が簡単にできます。例えばCtrl + 3を押すと上から3つ目のGmailタブが開きます。このように使用頻度の高いサービスがより扱いやすくなりGoodなサービスだと思いました。今は有料プランお試し期間ですが、このまま有料プランに切り替えようと思います。どちらかというと仕事場で役立っています。NotionやTwitterを1つのウィンドウに独立させたかったので良いサービスだと思いました。
それでは他の点の説明に入ります。
DS3231を用いた現在時刻の取得
現在時刻の取得は決まった時間に通知するための必須要件です。なので取得に成功しないとアラーム作りが進まないことを意味します。
アラーム作りってどんな感じ?と思いましたら8月18日に投稿した記事に目を通してもらえますか?
現在時刻の取得に使った部品は次の通りです。
- ESP32-DevKitC-32E
- リアルタイムクロックモジュール(DS3231 AT24C32)
- サンハヤト SAD-101 ニューブレッドボード
- ジャンパワイヤ F-M 4本
またプログラム作成および配線を組むのにこちらのサイトを参考にしました。
Using the ESP32 with RTC DS3231 module
ESP32-DevKitCでNTPサーバと時刻同期して RTCモジュール DS3231SNの時刻合わせを行うLCD時計:環境モニタ(1)
プログラムをESP32に書き込んで、DS3231で取得した時間をシリアルモニタに表示させることができれば成功です。
配線と現在時刻取得結果
配線は画像のように行いました。
初めはDS3231をブレッドボードに刺して配線しようと考えましたがPOWERランプが点いたり消えたりしました。POWERランプが点いていれば電力が通っていることを意味します。これでは現在時刻の取得を安定させることができないのでジャンパワイヤ F-Mを使って接続するようにしました。
Fritzingというツールを使って配線図と回路図をより分かりやすく書くと画像の通りです。回路図はクリックすると元々のサイズで表示されます。
ブレッドボードの穴が小さくて分かりづらい? 表の形で書くとこのようになります。
DS3231 端子名 | ESP32 ピン名 |
---|---|
GND | GND |
VCC | 3.3V |
SDA | 21ピン |
SCL | 22ピン |
プログラムを書き込みシリアルモニタに現在時刻を表示させて確認しました。もくもく会に取り組んで2時間、現在時刻の取得に成功しました。
何はともあれ現在時刻を取得できて良かったです。これでアラーム作りが先に進む。次にデータベースおよび操作画面のサーバーとなるAWS EC2を立てることにしました。
現在時刻取得用プログラム
#include <WiFi.h>
#include <time.h> // Timeライブラリ
#include <DS3232RTC.h> // DS3232、DS3231用ライブラリ
#include <esp_sntp.h>
DS3232RTC MaihaAlarmRTC(false);
// 2022/03/27:曜日の文字数を9文字固定に変更
const char* weekStr[7] = {"Sunday ","Monday ","Tuesday ","Wednesday","Thursday ","Friday ","Saturday "};
const char* ssid = "yourssid";
const char* password = "yourpassword";
const char* ntpServer = "ntp.nict.jp";
const long gmtOffset_sec = 32400;
const int daylightOffset_sec = 0;
void setup() {
struct tm timeInfo;
Serial.begin(115200);
MaihaAlarmRTC.begin();
//WiFi接続
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
Serial.print("."); // 進捗表示
delay(500);
}
// WiFi接続の表示
Serial.println("");
Serial.println("WiFi connected");
delay(2000);
// NTPサーバからJST取得
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
delay(2000);
// 内蔵RTCの時刻がNTP時刻に合うまで待機
while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET) {
Serial.print(">"); // 進捗表示
delay(1000);
}
//内蔵RTC時刻 = NTP時刻の表示
Serial.println("Time matched");
delay(2000);
// 内蔵RTCの時刻の取得
getLocalTime(&timeInfo);
// 内蔵RTCの時刻をDS3231に時刻設定
//setTime(12, 56, 0, 20, 8, 2022); // 手動設定・動作確認用(時、分、秒、日、月、年)
setTime(timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec, timeInfo.tm_mday, timeInfo.tm_mon + 1, timeInfo.tm_year + 1900);
MaihaAlarmRTC.set(now());
//WiFi切断
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop(void) {
showSerialMonitor();
delay(1000); // 1秒ごとに時刻を取得する。1分ごとにする場合は60000と設定する
}
#define countof(a) (sizeof(a) / sizeof(a[0]))
void showSerialMonitor(void) {
// RTCから時刻取得
tmElements_t tm;
MaihaAlarmRTC.read(tm);
char datestring[20];
snprintf_P(datestring,
countof(datestring),
PSTR("%04u/%02u/%02u %02u:%02u:%02u"),
tm.Year + 1970,
tm.Month,
tm.Day,
tm.Hour,
tm.Minute,
tm.Second );
Serial.println(datestring);
}
AWSアカウント作成&IAMユーザー作成
AWSアカウントを作成してログインするとAWSマネジメントコンソール画面が開きます。この中にEC2があるので早速開いて起動といいたいところですが待ってください。
アカウント作成した直後はいわゆるrootユーザーでログインしています。rootユーザーはすべての権限を持っているといってもよく、アカウントの削除もできてしまいます。このユーザーで作業するのはセキュリティ上よろしくないのでIAMユーザーと呼ばれるユーザーを作成します。
AWSアカウントで最初にやるべきことが集まった記事からIAMユーザーを作成する手順があるYoutube動画を開いてIAMユーザーを作成しました。
【資料公開】AWSアカウントで最初にやるべきこと 〜2022年6月版〜
手順については次の通りです。
- AWSマネジメントコンソールからIAMを開きます。
- ユーザーグループを作成してポリシーにAmazonEC2FullAccessとIAMUserChangePasswordを付与します。このポリシーがあることでEC2の操作およびアカウントのパスワード変更ができるようになります。
- IAMユーザーを作成します。作成した後に出てくるCSVダウンロードページは作成直後にしか表示されないので必ずCSVをダウンロードします。パスワード、公開鍵、秘密鍵、AWSコンソールURLが書かれています。
- コンソールURLからログインしてパスワードを変更し、AWSマネジメントコンソールが開けば成功です。
加えてrootユーザーとIAMユーザーに2段階認証(MFA)を設定します。設定すると誰かにパスワードを知られてもコンソールに侵入されることがなくなります。
下の画像は作成したIAMユーザーです。mado-ohm-representative(まどおーむ代表)というユーザーグループを作成し、UotoHotaru(魚戸ホタル)というIAMユーザーを作成しました。ログインも出来ています。
続けてこのIAMユーザーでEC2を起動させました。
EC2起動&PostgreSQLインストール
EC2は次のように設定しました。
- AMI:Amazon Linux 2(x86_64)
- インスタンスタイプ:t3a.nano
- Elastic IP:インスタンスと関連付け済み
AMI(Amazon Machine Image)とはEC2で仮想マシンを起動させるのに必要な情報が集まっているディスクイメージです。Linuxなので今いる場所にあるファイルを一覧表示するlsコマンドやファイルの移動や名前変更に使うmvなどのlinuxコマンドが使えます。AMIはArmベースのものもあり、仕事で起動させた経験もありますが、対応していないサービスも存在するためx86の方にしました。
インスタンスタイプは以前の記事で述べたようにt3a.nanoです。aというのはアベイラリティーゾーンの名前で、仮にaで障害が発生した場合にcやdのゾーンに切り替えることはできないことを意味します。そのためt3インスタンスより安くなっています。
PostgreSQLをEC2でインストールするにはEC2内部に入る必要があります。内部にはSSH接続という方法で入ります。SSH接続にはEC2のIPアドレスを使います。Elastic IPを設定しておくと停止してから起動したときにIPが変わらなくなりSSH接続の設定で再設定する手間が省けます。
自分は次の手順でSSH接続を行いました。
- セキュリティグループでSSH接続用のポート22をインパウンドルールに設定したルールを作成します。
- EC2を開き画像のようにアクション→セキュリティ→「セキュリティグループを変更」をクリック
- 開いた画面から作成したルールを「セキュリティグループに追加」ボタンを押して追加した後に保存する
- Rloginを起動させてホスト名をEC2のIPv4アドレス、TCPポートを22ログイン、ログインユーザーをec2-user、SSH認証鍵を設定したサーバー設定を作成します。
- サーバー設定からOKボタンを押して接続します。接続できたらsudo yum updateコマンドを実行してアップデートします。
- sudo vi /etc/ssh/sshd_configコマンドを実行して、例えば「Port 9999」といったようにポート番号を任意の番号に変更します。
- sudo systemctl restart sshdコマンドを実行してsshdを再起動し、ポート番号の変更を適用します。
- セキュリティグループで任意の番号のポートを設定したルールを作成します。③と同様にEC2にルールを追加して、元のルールを削除して保存します。
ポートが22のままではセキュリティ的に脆く、Rloginでサーバー設定を変更したときに2222となってしまい設定し直す羽目になるので別の番号を当てています。9999は例に挙げただけで実際の番号とは異なります。
amazon linux extrasコマンドを使ってphp8.0とpostgresql14をインストールして目標達成です。
あと残っている作業はまだまだたくさん。
- 設定したPostgreSQLをpgAdmin4で直感的に操作できるようにする
- PHPファイルを置いてブラウザで開くことができるか確認する
他の作業も進めて締め切り(9/25)までには成果を出したいです。そのためには土日のどちらかに集中して取り組む時間が必要です。そこで27日に再びPivot川西に訪れ、集中して電子工作することに決めました。
最後に
28日までの予定は下記のとおりです。
- 25日 EC2にインストールしたPostgreSQLをpgAdmin4で開けるか試す
- 26日 カクヨムエッセイ「まどろみみっく1年生」14話投稿予定 人工島にある屋内市民プールに行く予定
- 27日 Pivot川西 10時~18時勉強 帰りMALIMO
- 28日 8月まとめ & 9月初め記事作成 + 色織まいはさんの正面図を試し書き
アラーム作りは誰を対象にしたものかと言いますとトリ型まどろみみっく 色織まいはさんです。ラフはあるので視覚化することを優先した方がよいと思います。
オンラインもくもく会は大変有意義であり、次回参加したときは「おしゃべり」にも取り組みます。オンラインのIT勉強会は移動に何時間も汗をかくことがないのがいいですね。27日の作業の進み具合によって9月10日のもくもく会に参加するかどうかが決まります。
9月10日開催のフリースタイルもくもく会のリンクも貼っておきます。
第92回【オンライン開催】フリースタイルもくもく会【学生歓迎!】
以上になります。
それでは最後まで読んでいただきありがとうございました。ほた~