投稿

11月, 2023の投稿を表示しています

AmazonSAMから既存SQSにメッセージ送信

イメージ
AmazonSAMから既存SQSにメッセージ送信 AmazonSAMから既存SQSにメッセージ送信 普通なら結構簡単です。 Amazon SQS作って Policies に SQSSendMessagePolicy を追加してやります。 Resources : HelloWorldFunction : Type : AWS : : Serverless : : Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties : CodeUri : hello - world/ Handler : app.lambdaHandler Runtime : nodejs18.x Architectures : - x86_64 Events : HelloWorld : Type : Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties : Path : /hello Method : get Policies : - SQSSendMessagePolicy : QueueName : "MyQueueName" で、後は @aws-sdk/client-sqs をインストールして。 $ npm install @aws-sdk/client-sqs プログラムは以下のようにすればいいだけ。 impo

AmazonSAMから既存RDS

AmazonSAMから既存RDS AmazonSAMから既存RDSに接続 AmazonSAMのLambdaから既に存在してる既存RDSに接続する。 一応接続できたのでメモ。 template.yaml 以下のように Policies と VpcConfig と SubnetIds を追加。 Resources : HelloWorldFunction : Type : AWS : : Serverless : : Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties : CodeUri : hello - world/ Handler : app.lambdaHandler Runtime : nodejs18.x Architectures : - x86_64 Events : HelloWorld : Type : Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties : Path : /hello Method : get Policies : - AmazonRDSDataFullAccess # RDSアクセス権 VpcConfig : SecurityGroupIds : - sg - 0ec99999999999999

Node.jsでMySQL

Node.jsでMySQL Node.jsでMySQL Node.jsからMySQLにアクセスする方法です。 なんか検索すると色々なコードがあって混乱したんですが、結局以下のように落ち着いたのでメモって置きます。 インストール npm install mysql2 mysql2/promise を使うのが吉のようです。 インポート ソース上で利用するには最初にimportします。 import * as mysql from 'mysql2/promise' requireは最近流行らないので使いません。 SELECT async function selectExample ( ) { var conn = null try { conn = await mysql . createConnection ( { host : ホスト , port : ポート , user : ユーザー名 , password : パスワード , database : データベース } const [ rows ] = await conn . execute ( 'select fld1, fld2 from mytable' ) return rows } catch ( error ) { console . log ( error ) throw error } finally { if ( conn ) await conn . end ( ) } } await selectExample ( ) mysql2/promiseの関数は基本非同期なのでasync/await使います。 selectでexecuteなのがモヤモヤ。 INSERT/UPDATAE async function insertExample ( ) { var conn = null try { conn

ESP32をBluetoothに繋げる

イメージ
ESP32をBluetoothに繋げる ESP32をBluetoothに繋げる Bluetoothシリアルを試してみます。 Bluetoothのシリアル接続は SPP (Serial Port Protocol) と呼ばれます。 ESP32にはSPPのホストになってもらい、スマートフォンから接続してみます。 SPPはBluetooth Classicに属します。 Classicとは別にBluetooth BLE (Bluetooth Low Energy) と呼ばれる規格があるのですが、こちらは新しい規格でBluetoothでお馴染みのペアリング操作などが不要且つ低電力で動作することを目的とした規格です。 Classicはヘッドフォンやキーボードなど基本的に同じみのものです。SPPはClassicにカテゴライズされます。 プログラム 単純にSPPサーバーとして起動、接続されたら送信されてきたデータをエコーバックするだけの単純なものです。 最初からやります。 VSCode起動後にF1 (またはCtrl+Shift+P) でコマンドパレットを開き、 ESP-IDF: New Project を入力/選択します。 以下の画面になるのでProject NameとProject directory (保存先にプロジェクト名でディレクトリが作成されます) を入力します。 他の項目は特に弄らなくてよいです。 Choose Templete ボタンで作成です。 テンプレートを選択する画面になるので template-app を選択して Create project using template template-app をクリックします。 次にBluetoothを使うために設定があります。 VSCodeの画面下のツールバーから歯車マークをクリックしてmenuconfigを起動します。 Bluetooth を探してチェックします。 次に Bluedroid Options を探して以下をチェックします。 次に Controller Options を探して以下のように変更します。 最後に Sava ボタンで保存です。 プログラムソースは以下になります。 /** * Bl

ESP32にmicroSD接続

イメージ
ESP32にmicroSD接続 ESP32にmicroSD接続 ESP32にmicroSDカードを接続します。 データやHTMLなどストレージがあった方が便利ですしね。 また 秋月電商 さんで調達しました。 買ったのは以下になります。 マイクロSDカードスロットDIP化キット 300円 マイクロSDカード 16GB 680円 後は10kΩの抵抗を2個ですね。 流石に抵抗一個とかは買えないので100本入りとかになっちゃいますけど。 配線 以下を参考にESP32と接続してください。 microSD SPI ESP32 DAT2 - - CD/DAT3 CS GPIO(16) CS CMD DI GPIO(17) MOSI VDD VDD VDD33 CLK SCLK GPIO(18) CLK VSS VSS GND DAT0 DO GPIO(19) MISO DAT1 - - SWA - - SWB - - VDD(3.3V)とGND以外は4本接続すればいいだけです。 CLKとCSは10kΩの抵抗でプルアップしておくと安定するようです。 ESP32のGPIOは16~19を指定してますが、これはプログラムで変更できるのでGPIOならどのピンでも構いません。 こんな感じになりました。 プログラム ESP-IDFのサンプルから適当なものを選んで動作確認だけしてみます。 F1 (またはCtrl+Shift+P)でコマンドパレットを開いて “ ESP-IDF: Show Examples Projects ” を選択。 一覧から protocols - http_server - file_serving を選択。 menuconfig を開いて HTTP file_serving example menu の Use SD card for file storage をチェックを入れる、そして Use SDMMC host のチェックを外します。 そうすると SD card pin configuration (SPI) の項目が出てきますので、以下のよう

ESP32をWi-Fiに繋げる

ESP32をWi-Fiに繋げる ESP32をWi-Fiに繋げてHello World これをやりたいが為にESP32をチョイスしたと言っても過言ではないです。 Wi-Fiに繋げて、後はESP32を電池で動かせれば言うことなし。 さっそく自宅のWi-Fiに接続してみます。 Wi-Fi経由でLチカさせましょう。 まずESP32のWi-Fiですが以下のモードがあります。 ステーション ESP32からWi-Fiアクセスポイントに接続しに行きます。 アクセスポイント ESP32自身がアクセスポイントになって接続を受け付けます。 ステーション + アクセスポイント 近接認識ネットワーク (NAN) 近くにいるデバイスと相互接続できます。 Wi-Fi Aware 。 上記以外にもWIFI_IF_MAXというモードがあるのですが、こちらは調べてもよくわかりませんでした。 とりあえず ステーション で自宅のWi-Fiに接続してみます。 ソース Wi-Fiに接続してWebサーバーを起動。 Webサーバーは「Hello World」を表示するだけの簡単なものです。 # include <stdio.h> # include "freertos/FreeRTOS.h" # include "freertos/event_groups.h" # include "esp_wifi.h" # include "esp_event.h" # include "esp_log.h" # include "esp_system.h" # include "nvs_flash.h" # include "esp_http_server.h" // Wi-Fiの暗号化モードは WPA2-PSK AES (WPA2ならいいのかも) # define WIFI_SSID "mySSID" // 自分のWi-FiのSSID # define WIFI_PASS "myPASS&

AmazonSAMのデバッグ

AmazonSAMのデバッグ AmazonSAMのデバッグ VSCodeでAmazonSAMのデバッグする場合は「構成の追加…」で AWS SAM:Debug Lambda Function Locally を選択すればlaunch.jsonを作ってくれてF5で実行できるのですが実行する度にコンテナ起動するので時間掛かります。 じゃあ以下でローカル実行してる時にデバッグしたい場合はどうするのかという話です。 $ sam local start-api デバッグポートオプション付きで起動する “-d"または”–debug-port"オプションを使用します。 このオプションを付けるとコンテナがデバッグモードで起動されます。 $ sam local start-api --debug-port 5555 launch.jsonにアタッチ用の設定を追加する 以下を追加します。 "version" : "0.2.0" , "configurations" : [ { "type" : "node" , "request" : "attach" , "name" : "Attach to SAM CLI" , "address" : "localhost" , "port" : 5555 , "localRoot" : "${workspaceRoot}/hello-world" , "remoteRoot" : "/var/task" , } , これでVSCodeからデバック実行するとSAMのコンテナに接続されます。 sam local start-api を実行した後必ず一度は接続してください。 デバックモードで起動してる場

AmazonSAMをローカル実行してMySQLに接続する

AmazonSAMをローカル実行してMySQLに接続する AmazonSAMをローカル実行してMySQLに接続する AmazonSAMのLambdaをローカルで実行する時は以下ですよね。 $ sam local start-api AmazonSAMって上記で自動的にDockerコンテナ起動してLambdaの実行環境を作ってくれます。 で、既にDockerでMySQLが起動してる場合、そのMySQLにLambdaから接続される方法でちょっと困ったんで手順残しときます。 Dockerネットワーク作成 AmazonSAMとMySQLでネッワークを共有させるためにネットワークを作ります。 作成 $ docker network create my-network 削除 $ docker network rm my-network MySQLで独自ネットワークを使わせる 作成したmy-network上でMySQLのコンテナを起動します。 直接コンテナ起動する場合は --network オプションを指定します。 $ docker run -e MYSQL_ROOT_PASSWORD=passw0rd -d -p 3306:3306 --network my-network mysql:8.0 docker-composeを使う場合はcompose.ymlを以下のように設定します。 version : '3.9' services : db : image : mysql : 8.0 environment : MYSQL_ROOT_PASSWORD : passw0rd TZ : 'Asia/Tokyo' hostname : db_host ports : - 3306 : 3306 networks : - my - network networks : my-network : external : true AmazonSAMで独自ネットワークを使わせる 以下のように --docker-network オプ

ESP-IDFのサンプルで"STREQUAL" "linux" Unknown arguments specified が出る

ESP-IDFのサンプルで"STREQUAL" "linux" Unknown arguments specified が出る ESP-IDFのサンプルで"STREQUAL" “linux” Unknown arguments specified が出る ESP-IDFのサンプルプログラムで protocols/http_server/simple をビルドしようとすると以下のようなエラーが出てきました。 ninja: error: loading 'build.ninja': 指定されたファイルが見つかりません。 そこでConfiguration Editor (VSCodeの下の歯車マークアイコン) を開くと以下のエラーが出てきて開けません。 CMake Error at CMakeLists.txt:7 (if): if given arguments: "STREQUAL" "linux" Unknown arguments specified CMakeLists.txtの7行目が以下のようになっます、 if(${IDF_TARGET} STREQUAL "linux") あー、これは IDF_TARGET が未定義か何かで if(STREQUAL “linux”) とか解釈されちゃってるのかな。 IDF_TARGETはコマンドパレットの "ESP-IDF: Set Espressif device target"で設定できる・・・はずなんだけど設定しても適用されない。 なのでCMakeList.txtの該当部分を以下に書き変えちゃいます。 if("esp32" STREQUAL "linux") 一応これでビルド通ります。 これが正しい対応なわけないけど、IDF_TARGETの設定方法どうやってやるんだろ。

ESP32でデバッグ

イメージ
ESP32でデバッグ ESP32でデバッグ Lチカくらいならデバッガなしでもいけますが、ちょっとプログラムが大きくなると途端に苦しくなってくるのでデバッグできるものならやりたい。 という訳でVSCodeからESP32のデバッグをやってみました。 ESP32はJTAG対応になっています。JTAGはハードウェアをデバッグ/テストするための共通規格です。 なので安価にデバッグ環境が構築できます。 vscode-esp-idf-extension のTutorialsの3つ目に「 Debugging 」のリンクがあるので読みながら進めます。 ハードウェアの用意 ESP32だけではデバッグできません。別途デバッグ用のハードウェアが必要です。 とはいえそんなに高価なハードウェアじゃありません。 必要なものは 秋月電商 さんで全部揃いました。 FT2232D USBシリアル2ch変換モジュール 1,450円 USBケーブル USB2.0 Aオス-ミニBオス 1.5m A-miniB 170円 ブレッドボード EIC-301 300円 これだけです。これでデバッグできるようになるんですから買いです。 なぜかUSBケーブルが今一馴染みのないminiBなので注意です。 ちなみにFT2232Dで何故にデバッグできるのかですが、元々このチップがJTAG対応だからのようです。 ESP-IDFはデバッグに OpenOCD (Open On-Chip Debugger) というオープンソースを使っており、OpenOCDで推奨されているチップまたはボードが Debug Adapter Hardware に列挙されています。 この中の USB FT2232 Based の所に入ってました。 FT2232Dのドライバ更新 秋月のFT2232DをUSBケーブルでPCに繋ぐと2つのシリアルポートが追加されます。 この内片方のドライバを更新する必要があります。詳細は ここ です。 FT2232DをPCに接続しておきます。 Zadig をダウンロード/インストール。 Zadigを起動して、メニューの Options - List All Devices を選択します。 Dual RS23

とりあえずLチカ

イメージ
とりあえずLチカ とりあえずLチカ Lチカ、LEDをチカチカ点滅させるヤツですね。皆やりますよね。 Amazonでブレッドボードを購入したのでやります。 あと以下のようなジャンパピンなんかも要りますね。買いました。 LEDと抵抗(330Ω)は 秋月電商 で一山いくらのものを購入。 VSCodeでプロジェクト作成 ESP-IDFにサンプルがあります。 F1 (またはCtrl+Shift+P)でコマンドパレットを開きます。 “ESP-IDF: Show Examples Projects” を入力してサンプルリストを出します。 その中からLチカの blink を選択します。 後はビルドしてフラッシュ書き込みするだけです。 詳細 ESP32にLED接続 サンプルソースを見ると細かいことはすっ飛ばしてGPIO5にLED出力が出てます。 ESP32のGPIOは直接LEDを駆動できるほどの電流(20~30mA)が流せるようなので直接繋げちゃいます。 ESP32のシルク印刷に「5」と書いているピンに330Ωの抵抗を繋げて 抵抗の先っぽにLEDのアノード繋げて LEDのカソードをESP32のGNDに繋げます こんな感じ 動かしてる所。 動画は HitPaw Edimakor という編集ソフトの無料版で作ってます。なんかすごく分かり易いかも。 ソース解説 非常に簡単でプログラム部分は main/blink_example_main.c だけです。 コメント部分や実行されない部分は省いてます。 # include <stdio.h> # include "freertos/FreeRTOS.h" # include "freertos/task.h" # include "driver/gpio.h" # include "esp_log.h" # include "led_strip.h" # include "sdkconfig.h" static const char * TAG = "example

PostgreSQLのDockerイメージにPLV8を適用

イメージ
PostgreSQLのDockerイメージにPLV8を適用 PostgreSQLのDockerイメージにPLV8の言語拡張を適用 PLV8 はPostgreSQL用のJavaScript言語拡張機能です。 ちょっと探してみたんですがPLV8適用済のDockerイメージがなかったんで作ります。 PostgreSQLのdocker環境作ります dockerfile-postgres FROM postgres:12.9 ARG DB_LANG=en_US RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8 ENV LANG $DB_LANG.utf8 compose.yml version : '3.4' services : db : build : context : . dockerfile : ./dockerfile - postgres args : - DB_LANG=ja_JP container_name : postgres environment : POSTGRES_USER : "root" POSTGRES_PASSWORD : "passw0rd" POSTGRES_INITDB_ARGS : "--encoding=UTF-8" TZ : 'Asia/Tokyo' ports : - 0.0.0.0 : 5432 : 5432 hostname : postgres user : root docker起動します。 > docker-compose build > docker-compose up -d PLV8適用 > docker exec -it postgres /bin/bash # apt update # apt