かべぎわブログ

ブログです

RaspberryPiと光センサで部屋が暗くなったらLEDを点灯させる

今回はRaspberryPiと光センサ(フォトレジスタ)をつかって部屋が暗くなったらLEDを点灯させてみたいと思います。

配線図

f:id:kabegiwakun:20170906193423p:plain

かなり複雑です。
コードとあわせて後ほど説明します。

(参考)ADコンバータのピン機能表(参考)

f:id:kabegiwakun:20170825202229p:plain

MCP3008 8チャネル 10ビット A/Dコンバータ(SPI接続)

MCP3008 8チャネル 10ビット A/Dコンバータ(SPI接続)

各ピンはそれぞれ以下のような機能を持っています。

  • VDD - 電源
  • VREF - 基準電圧入力
  • AGND - アナログアース(GND)
  • CLK - シリアルクロック
  • Dout - シリアルデータアウト
  • Din - シリアルデータイン
  • CS/SHDN - チップセレクト/シャットダウン入力
  • DGND - デジタルアース
  • CH0~7 - アナログ入力

くわしくは以下から
http://akizukidenshi.com/download/ds/microchip/mcp3008.pdf

コード

RaspberryPi

かんたんな説明

まず、光センサというのはどういったものかというと、光の強弱で抵抗の値を変化させるセンサです。またの名を光抵抗器といいます。
これはアナログな値なので、RaspberryPiで利用する際はあいだにADコンバータをかませます。
0が暗く、4095が最も明るい値としてRaspberryPiでは認識されます。

さて、コードの説明をしていきます。
重要なのは60行目のif文です。
部屋の明るさが1500を下回っていたならLEDを点灯、そうでなければ消灯しています。
(1500としたのは私の部屋の明るさが3200くらいだったのでその半分くらい…といったかんじで設定しています。)

実際に動かしてみたところ


RaspberryPiと光センサで部屋が暗くなったらLEDを点灯させる

部屋を暗くするとLEDが点灯するのがわかるとおもいます。
また、光センサを手で抑えて暗くしても点灯します。

まとめ

今回はLEDを点灯させただけでしたが、部屋の明るさを検知して部屋の電気がつけっぱなしになっていたら通知するなど、いろいろ夢が広がりますね!

RaspberryPiとタクトスイッチでシャットダウンボタンを実現する

みなさん、RaspberryPiの電源切るのってめんどくさくないですか?
ということで今回は RaspberryPiとタクトスイッチでシャットダウンボタンを実現しようと思います。

配線図

超シンプルです。
GPIO14とGNDにタクトスイッチをつなげただけです。 f:id:kabegiwakun:20170903191848p:plain

コード

RaspberryPi

かんたんな説明

20行目でタクトスイッチが押されたときにmy_callback関数を呼び出します。
そこでsubprocess.Popensudo shutdownコマンドを渡しているだけです。 単純ですね!

まとめ

さて、シャットダウンボタンは実現できました。
でも本当に実現したいのは起動ボタンだったりします。
たぶんいつかきっと紹介できると思います…

RaspberryPiでHiLetGoの雨滴センサーの値をデジタル入力で取得してみる

RaspberryPiでHiLetGoの雨滴センサーの値をデジタル入力で取得してみたいと思います。
今回使うのはこちら

配線図

雨滴センサのいい感じの絵がなかったので手書きです。 f:id:kabegiwakun:20170905074102p:plain

雨滴センサーには4つのピンがあります。

ピンの名前 説明
VDD 電源
GND GND
DO デジタルアウト
AO アナログアウト

f:id:kabegiwakun:20170905074407j:plain

表のようにRaspberryPiと接続します。
今回はAOのピンはつかいません。

RaspberryPi 雨滴センサー
3.3V VDD
GND GND
GPIO(15) DO

コード

RaspberryPi

コードの簡単な説明

18行目でGPIO15の値が1であれば晴れ、そうでなければ雨を表示するように分岐させています。
これはこの雨滴センサーがセンサー部が乾いていたら1、濡れていたら0を返す仕様だからです。

実際に動かしてみたところ


RaspberryPiで雨滴センサ(LM393)の値をデジタル入力で取得してみる

まとめ

デジタル出力がついているとRaspberryPiでもかんたんに扱えますね!
これをベランダに置いて雨が降ってきたら通知するなど、夢が広がります!!!

若丸の馬刺しが美味しかったのレビューしてみる

若丸の馬刺しがおいしかったのでレビューします!
今回頼んだのはこちら

到着 内容物確認

注文して2日後くらいに届きました。
f:id:kabegiwakun:20170904213701j:plain

ダンボールを開けてみるとこんな感じ
まず「ご案内」が目につきます。 f:id:kabegiwakun:20170904213651j:plain

その下にお目当ての馬刺しがありました(写真撮りわすれた…)
馬刺しの大きさ比較としてはこんなかんじ。だいたいマウスとおんなじくらいです。 f:id:kabegiwakun:20170904214750j:plain

馬刺しのたれも同封されています。
[f:id:kabegiwakun:20170904215245j:plain

一緒に入っていた資料も確認していきましょう。
まず「ご案内」です。馬刺しの製造方法、保存方法、おいしい食べ方などが書いてあります。
f:id:kabegiwakun:20170904215254j:plain

あとは「衛生検査合格証」の案内がはいっていました。 f:id:kabegiwakun:20170904215804j:plain

せっかくなので衛生検査合格証を検索してみる

さて、せっかくなので衛生検査合格証についても見てみたいと思います。 以下にアクセスして、馬刺しの包装の裏面にはいっているロット番号を入力します。

若丸 馬刺し検査結果報告書検索

f:id:kabegiwakun:20170904220351j:plain f:id:kabegiwakun:20170904220334p:plain

すると、衛生検査合格証が表示されます。
まあみても素人にはなんのこっちゃわからないんですけれど…
多分いろいろとしっかりしているんでしょう! f:id:kabegiwakun:20170904220517p:plain

解凍する

馬刺しは冷凍されていますのでご案内のおいしい召し上がり方にしたがって解凍していきます。

まず、馬刺しを真空パックのまま水中で15分ほど解凍します。
f:id:kabegiwakun:20170904215312j:plain

15分経ったら半解凍状態になっていますので薄くスライスしていきます。 f:id:kabegiwakun:20170904233115j:plain

できました!
f:id:kabegiwakun:20170904233104j:plain

付属のタレにつけていただきます。 f:id:kabegiwakun:20170904233055j:plain

感想

やらわかくくさみもなく最高でした!
おすすめです!!

タクトスイッチでRaspberryPiのカメラをシャッターをきる

タクトスイッチでRaspberryPiのカメラのシャッターを切ってみたいと思います。 カメラの接続方法等は以下記事をごらんください。

kabegiwa.hatenadiary.jp

配線図

超シンプルです。GPIO14とGNDにタクトスイッチをつないでいます。

f:id:kabegiwakun:20170903191848p:plain

コード

RaspberryPi

説明

21行目でGPIO14の値を読み込んで、my_callback関数でraspistill -o wawawa.jpg -t 1を発行しています。
subprocess.Popenに配列形式でコマンドを記述することで実行することができます。

まとめ

タクトスイッチでカメラのシャッターをきることに成功しました。
これだけの簡易的な構成でデジカメみたいなものをつくることも可能です!

RaspberryPiにHiLetGoの激安カメラモジュールを装着してみる

今回はRaspberryPiにHiLetGoの激安カメラモジュールを装着してみようと思います。
f:id:kabegiwakun:20170830231144j:plain 以下のカメラモジュールを使います。
(HiLetgo OV5647 5MP カメラ OV5647 HDカメラモジュール Raspberry Pi に対応 A/B+/2 モデルB ケーブル)

RaspberryPi純正のカメラモジュールの5分の1のお値段でHD対応です。

カメラモジュールを装着する

画面中央の場所にカメラを装着します。
端子面がHDMIMicroSD側になるようにケーブルをいれます。 f:id:kabegiwakun:20170830225053j:plain f:id:kabegiwakun:20170830225044j:plain

これで装着は完了です。かんたんですね。

RaspberryPiでカメラを有効にする

初期設定ではRaspberryPiの設定でカメラがOFFになっているのでそれを有効にします。

「メニュー」→「設定」→「Raspberry Piの設定」を選択します。 f:id:kabegiwakun:20170830225113j:plain

インターフェイス」タブを選択し、「カメラ」を「有効」にして「OK」を選択します。 f:id:kabegiwakun:20170830225614j:plain

RaspberryPiを再起動するか聞いてくるので「はい」を選択します。 f:id:kabegiwakun:20170830225102j:plain

これでRaspberryPiの設定は完了です。

写真を撮ってみる

実際に写真を撮ってみようと思います。
以下のコマンドをコンソールで実行すると、ホームディレクトリにtest.jpgという画像が保存されるはずです。

raspistill -o test.jpg

とりあえずカメラモジュールを手で持ってコマンドを実行してみます。 f:id:kabegiwakun:20170830231054j:plain

撮れました! f:id:kabegiwakun:20170830231311j:plain

まとめ

800円とは思えないほどきれいに撮れました。
(iPadの指紋まで…)

RaspberryPiでカメラを試してみたい!
という方にはかなりおすすめです!!!

S3のIAM権限で使えるActionをまとめてみた

S3のIAM権限で使えるActionをまとめてみました!

Action 説明
s3:AbortMultipartUpload マルチアップロードを中止する
s3:CreateBucket バケットを作成する
s3:DeleteBucket バケットを削除する
s3:DeleteBucketPolicy バケットポリシーを削除する
s3:DeleteBucketWebsite バケットのWebサイト設定を削除する
s3:DeleteObject 現在のバージョンのオブジェクトを削除する
s3:DeleteObjectVersion 特定のバージョンのオブジェクトを削除する
s3:GetAccelerateConfiguration バケットのTransfer Acceleration設定を取得する
s3:GetBucketAcl バケットのアクセス制御リスト(ACL)を取得する
s3:GetBucketCORS Cross-Origin Resource Sharing (CORS)の設定を取得する
s3:GetBucketLocation バケットの置かれているリージョンを取得する
s3:GetBucketLogging バケットのロギングステータスを取得する
s3:GetBucketNotification バケットの通知設定を取得する
s3:GetBucketPolicy バケットポリシーを取得する
s3:GetBucketRequestPayment バケットのリクエストの支払い設定を取得する
s3:GetBucketTagging バケットに関連付けられたタグを取得する
s3:GetBucketVersioning バケットのバージョニング状態を取得する
s3:GetBucketWebsite バケットに関連付けられたWebサイトの設定を取得する
s3:GetLifecycleConfiguration バケットのライフサイクル設定を取得する
s3:GetObject オブジェクトを取得する
s3:GetObjectAcl オブジェクトのアクセス制御リスト(ACL)を取得する
s3:GetObjectTagging オブジェクトに関連付けられたタグを取得する
s3:GetObjectTorrent オブジェクトのtorrentファイルを取得する
s3:GetObjectVersion オブジェクトのバージョンを取得する
s3:GetObjectVersionAcl オブジェクトの現在のバージョンに関するアクセス制御リスト(ACL)を取得する
s3:GetObjectVersionTagging オブジェクトの現在のバージョンに関するタグを取得する
s3:GetObjectVersionTorrent オブジェクトの現在のバージョンに関するtorrentファイルを取得する
s3:GetReplicationConfiguration レプリケーション設定を取得する
s3:ListAllMyBuckets バケットの一覧を取得する
s3:ListBucket バケットの中身の一覧を取得する
s3:ListBucketMultipartUploads 進行中のマルチパートアップロードの一覧を取得する
s3:ListBucketVersions バケットのオブジェクトのバージョンの一覧を取得する
s3:ListMultipartUploadParts マルチパートアップロードのためにアップロードされた部分の一覧を取得する
s3:PutAccelerateConfiguration バケットのTransfer Accelerationを設定する
s3:PutBucketAcl バケットのアクセス制御リスト(ACL)を設定する
s3:PutBucketCORS バケットのCross-Origin Resource Sharing (CORS)を設定する
s3:PutBucketLogging バケットのロギング機能を設定する
s3:PutBucketNotification バケットの通知機能を設定する
s3:PutBucketPolicy バケットポリシーを設定する
s3:PutBucketRequestPayment バケットのリクエストの支払い設定を設定する
s3:PutBucketTagging バケットのタグを設定する
s3:PutBucketVersioning バケットのバージョニング状態を設定する
s3:PutBucketWebsite バケットのWebサイト設定を設定する
s3:PutLifecycleConfiguration バケットのライフサイクルポリシーを設定する
s3:PutReplicationConfiguration バケットのレプリケーション設定を設定する
s3:PutObject オブジェクトをバケットに追加する
s3:PutObjectAcl オブジェクトのアクセス制御リスト(ACL)を設定する
s3:PutObjectTagging オブジェクトにタグを設定する
s3:PutObjectVersionAcl オブジェクトのバージョンごとのアクセス制御リスト(ACL)を設定する
s3:PutObjectVersionTagging オブジェクトのバージョンごとのタグを設定する
s3:ReplicateDelete レプリケーション設定を削除する
s3:ReplicateObject オブジェクトをレプリケートする
s3:RestoreObject オブジェクトを復元する

RaspberryPiのCPUにヒートシンクをとりつけて熱対策してみる

今回はRaspberryPiのCPUにヒートシンクをとりつけて熱対策をしてみようと思います。
今回使うヒートシンクはこちら。
f:id:kabegiwakun:20170829222325j:plain

ヒートシンクを装着する

実際にヒートシンクを取り付けていこうと思います。
CPUとヒートシンクの2つに取り付ける必要があります。

f:id:kabegiwakun:20170829215415p:plain

といってもヒートシンクの裏面のシールを剥がしてCPUに貼り付けてあげるだけです。

f:id:kabegiwakun:20170829221440p:plain

装着してみました。 f:id:kabegiwakun:20170829222316j:plain

これで完了です!
かんたんですね!!!

EC2のIAM権限で使えるActionをまとめてみた

EC2のIAM権限で使えるActionをかんたんにまとめてみました!

Action 説明
ec2:AcceptReservedInstancesExchangeQuote コンバーティブルリザーブインスタンスの見積もりを受け入れる
ec2:AcceptVpcPeeringConnection VPCピアリング接続要求の受け入れる
ec2:AllocateAddress ElasticIPを割り当てる
ec2:AllocateHosts ハードウェア専有ホスト(Dedicated Host)を割り当てる
ec2:AssignPrivateIpAddresses セカンダリプライベートIPアドレスを割り当てる(EC2,ENIなどに)
ec2:AssociateAddress ElasticIPを関連付ける
ec2:AssociateDhcpOptions DHCPオプションを関連付ける
e2:AssociateIamInstanceProfile IAMインスタンスプロファイルを関連付ける
ec2:AssociateRouteTable ルートテーブルへサブネットを関連付ける
ec2:AttachClassicLinkVpc EC2-ClassicインスタンスをClassicLink対応のVPCにリンクさせる
ec2:AttachInternetGateway インターネットゲートウェイVPCに接続し、インターネットとVPC間の接続を可能にする
ec2:AttachNetworkInterface インスタンスにネットワークインタフェースを接続する
ec2:AttachVolume EBSボリュームを実行中または停止中のインスタンスに接続し、指定したデバイス名でインスタンスに公開する
ec2:AttachVpnGateway 仮想プライベートゲートウェイVPCに接続する
ec2:AuthorizeSecurityGroupEgress セキュリティグループのアウトバウンド設定を追加する
ec2:AuthorizeSecurityGroupIngress セキュリティグループのインバウンド設定を追加する
ec2:BundleInstance AmazonインスタンスストアでバックアップされたWindowsインスタンスをバンドルする
ec2:CancelBundleTask インスタンスストアでバックアップされたWindowsインスタンスのバンドル処理を取り消す
ec2:CancelvversionTask インスタンスまたはボリュームのインポートのアクティブな変換タスクを取り消す
ec2:CancelExportTask アクティブなエクスポートタスクを取り消す
ec2:CancelImportTask インプロセス仮想マシンまたはスナップショットのインポートをキャンセルする
ec2:CancelReservedInstancesListing リザーブインスタンスマーケットプレイスで指定されたリザーブインスタンスの一覧を取り消す
ec2:CancelSpotFleetRequests 指定されたスポットフリート要求をキャンセルする
ec2:CancelSpotInstanceRequests スポットインスタンス要求を取り消す
ec2:ConfirmProductInstance 製品コードがインスタンスに関連付けられているかどうかを判別する
ec2:CopyImage AMIをコピーする
ec2:CopySnapshot EBSのスナップショットをコピーする
ec2:CreateCustomerGateway VPNカスタマーゲートウェイを作成する
ec2:CreateDhcpOptions DHCPオプションを作成する
ec2:CreateFlowLogs VPCフローログを作成する
ec2:CreateFpgaImage デザインチェックポイント(DCP)からAmazon FPGAイメージ(AFI)を作成する
ec2:CreateImage AMIを作成する
ec2:CreateInstanceExportTask インスタンスをS3バケットにエクスポートする
ec2:CreateInternetGateway インターネットゲートウェイを作成する
ec2:CreateKeyPair キーペアを作成する
ec2:CreateNatGateway NATゲートウェイを作成する
ec2:CreateNetworkAcl ネットワークACLを作成する
ec2:CreateNetworkAclEntry ネットワークACLにエントリ(ルール)を作成する
ec2:CreateNetworkInterface サブネットにネットワークインターフェイスを作成する
ec2:CreatePlacementGroup クラスタインスタンスを起動するプレースメントグループを作成する
ec2:CreateReservedInstancesListing リザーブインスタンスマーケットプレイスで販売されるAmazon EC2標準リザーブインスタンスのリストを作成する
ec2:CreateRoute ルートテーブルにルートを作成する
ec2:CreateRouteTable ルートテーブルを作成する
ec2:CreateSecurityGroup セキュリティグループを作成する
ec2:CreateSnapshot EBSボリュームのスナップショットを作成する
ec2:CreateSpotDatafeedSubscription スポットインスタンスのデータフィードを作成する
ec2:CreateSubnet サブネットを作成する
ec2:CreateTags EC2のリソースにタグを作成する
ec2:CreateVolume EBSにボリュームを作成する
ec2:CreateVpc VPCにを作成する
ec2:CreateVpcEndpoint VPCエンドポイントを作成する
ec2:CreateVpcPeeringConnection VPCピアリング接続を作成する
ec2:CreateVpnConnection VPN接続を作成する
ec2:CreateVpnConnectionRoute VPN接続に関連付けられたスタティックルートを作成する
ec2:CreateVpnGateway 仮想プライベートゲートウェイを作成する
ec2:DeleteCustomerGateway カスタマーゲートウェイを削除する
ec2:DeleteDhcpOptions DHCPオプションを削除する
ec2:DeleteFlowLogs VPCフローログを削除する
ec2:DeleteInternetGateway インターネットゲートウェイを削除する
ec2:DeleteKeyPair キーペアを削除する
ec2:DeleteNatGateway NATゲートウェイを削除する
ec2:DeleteNetworkAcl ネットワークACLを削除する
ec2:DeleteNetworkAclEntry ネットワークACLのエントリ(ルール)を削除する
ec2:DeleteNetworkInterface ネットワークインターフェイスを削除する
ec2:DeletePlacementGroup プレイスメントグループを削除する
ec2:DeleteRoute ルートテーブルからルートを削除する
ec2:DeleteRouteTable ルートテーブルを削除する
ec2:DeleteSecurityGroup セキュリティグループを削除する
ec2:DeleteSnapshot スナップショットを削除する
ec2:DeleteSpotDatafeedSubscription スポットインスタンスのデータフィードを削除する
ec2:DeleteSubnet サブネットを削除する
ec2:DeleteTags タグを削除する
ec2:DeleteVolume EBSボリュームを削除する
ec2:DeleteVpc VPCを削除する
ec2:DeleteVpcEndpoints VPCエンドポイントを削除する
ec2:DeleteVpcPeeringConnection VPCピアリング接続を削除する
ec2:DeleteVpnConnection VPN接続を削除する
ec2:DeleteVpnConnectionRoute VPN接続に関連付けられたスタティックルートを削除する
ec2:DeleteVpnGateway 仮想プライベートゲートウェイを削除する
ec2:DeregisterImage AMIの登録を解除する
ec2:DescribeAccountAttributes AWSアカウントの属性を表示する
ec2:DescribeAddresses ElasticIPを表示する
ec2:DescribeAvailabilityZones アベイラビリティゾーン(AZ)を表示する
ec2:DescribeBundleTasks バンドルタスクを表示する
ec2:DescribeClassicLinkInstances ClassicLinkをでVPCにリンクされたEC2-Classicインスタンスを表示する
ec2:DescribeConversionTasks VMインポート/エクスポートの変換タスクを表示する
ec2:DescribeCustomerGateways VPNカスタマーゲートウェイを表示する
ec2:DescribeDhcpOptions DHCPオプションを表示する
ec2:DescribeExportTasks エクスポートタスクを表示する
ec2:DescribeFlowLogs VPCフローログを表示する
ec2:DescribeFpgaImages Amazon FPGAイメージ(AFI)を表示する
ec2:DescribeHostReservationOfferings 購入可能なハードウェア専有ホスト(Dedicated Host)予約を表示する
ec2:DescribeHostReservations 自分のアカウントに関連付けられているハードウェア専有ホスト(Dedicated Host)予約を表示する
ec2:DescribeHosts ハードウェア専有ホスト(Dedicated Host)を表示する
ec2:DescribeIamInstanceProfileAssociation IAMインスタンスプロファイルの関連付けを表示する
ec2:DescribeIdentityIdFormat IAMユーザー、IAMロール、またはルートユーザのIDフォーマット設定を表示する
ec2:DescribeIdFormat IDをフォーマット設定を表示する
ec2:DescribeImageAttribute AMIの属性を表示する
ec2:DescribeImages 利用可能なイメージ(AMI,AKI,ARI)を表示する
ec2:DescribeImportImageTasks インポートされた仮想マシンまたは既に作成されたスナップショットタスクのインポートを表示する
ec2:DescribeImportSnapshotTasks インポートスナップショットのタスクを表示する
ec2:DescribeInstanceAttribute インスタンスの属性を表示する
ec2:DescribeInstances インスタンスを表示する
ec2:DescribeInstanceStatus インスタンスのステータスを表示する
ec2:DescribeInternetGateways インターネットゲートウェイを表示する
ec2:DescribeKeyPairs キーペアを表示する
ec2:DescribeMovingAddresses EC2-VPCプラットフォームに移動している、またはEC2-Classicプラットフォームに復元されているElasticIPを表示する
ec2:DescribeNatGateways NATゲートウェイを表示する
ec2:DescribeNetworkAcls ネットワークACLを表示する
ec2:DescribeNetworkInterfaceAttribute ネットワークインターフェイスの属性を表示する
ec2:DescribeNetworkInterfaces ネットワークインターフェイスを表示する
ec2:DescribePlacementGroups プレイスメントグループを表示する
ec2:DescribePrefixLists プレフィックスリスト名とプレフィックスリストID、およびサービスのIPアドレス範囲を含むプレフィックスリスト形式で使用可能なAWSサービスを表示する
ec2:DescribeRegions 現在利用現在利用可能なリージョンを表示する
ec2:DescribeReservedInstances 購入したリザーブインスタンスを表示する
ec2:DescribeReservedInstancesListings リザーブインスタンスマーケットプレイスにアカウントのリザーブインスタンス一覧を表示する
ec2:DescribeReservedInstancesModifications リザーブインスタンスに加えられた変更を表示する
ec2:DescribeReservedInstancesOfferings 購入可能なリザーブインスタンスを表示する
ec2:DescribeRouteTables ルートテーブルを表示する
ec2:DescribeSecurityGroups セキュリティグループを表示する
ec2:DescribeSnapshotAttribute スナップショットの属性表示する
ec2:DescribeSnapshots スナップショットを表示する
ec2:DescribeSpotDatafeedSubscription スポットインスタンスのデータフィードを表示する
ec2:DescribeSpotFleetInstances スポットフリートの実行インスタンスを表示する
ec2:DescribeSpotFleetRequestHistory スポットフリート要求を指定された時間内に表示する
ec2:DescribeSpotFleetRequests 自分のスポットフリート要求を表示する
ec2:DescribeSpotInstanceRequests アカウントに属するスポットフリート要求を表示する
ec2:DescribeSpotPriceHistory スポット価格の履歴を表示する
ec2:DescribeStaleSecurityGroups セキュリティグループの失効したルールを表示する
ec2:DescribeSubnets サブネットを表示する
ec2:DescribeTags タグを表示する
ec2:DescribeVolumeAttribute EBSのボリュームの属性を表示する
ec2:DescribeVolumes EBSボリュームを表示する
ec2:DescribeVolumesModifications EBSのボリュームの現在の変更ステータスを表示する
ec2:DescribeVolumeStatus ボリュームのステータスを表示する
ec2:DescribeVpcAttribute VPCの属性を表示する
ec2:DescribeVpcClassicLink VPCのClassicLinkのステータスを表示する
ec2:DescribeVpcClassicLinkDnsSupport VPCのClassicLinkDNSのステータスを表示する
ec2:DescribeVpcEndpoints VPCエンドポイントを表示する
ec2:DescribeVpcEndpointServices VPCエンドポイントを利用できるすべてのAWSサービスを表示する
ec2:DescribeVpcPeeringConnections VPCピアリング接続を表示する
ec2:DescribeVpcs VPCを表示する
ec2:DescribeVpnConnections VPN接続を表示する
ec2:DescribeVpnGateways 仮想プライベートゲートウェイを表示する
ec2:DetachClassicLinkVpc リンクされたEC2-ClassicインスタンスVPCからリンク解除(デタッチ)する
ec2:DetachInternetGateway インターネットゲートウェイVPCから切り離し、インターネットとVPC間の接続を無効にする
ec2:DetachNetworkInterface インスタンスからネットワークインターフェイスを切り離す
ec2:DetachVolume インスタンスからEBSボリュームを切り離す
ec2:DetachVpnGateway VPCから仮想プライベートゲートウェイを切り離す
ec2:DisableVgwRoutePropagation 仮想プライベートゲートウェイ(VGW)がVPCの指定されたルートテーブルにルートを伝播しないようにする(Disableにする)
ec2:DisableVpcClassicLink VPCのClassicLinkを無効にする
ec2:DisableVpcClassicLinkDnsSupport VPCのClassicLink DNSサポートを無効にする
ec2:DisassociateAddress ElasticIPを関連付けられているインスタンスまたはネットワークインターフェイスから分離する
ec2:DisassociateIamInstanceProfile IAMインスタンスプロファイルの関連付けを解除する
ec2:DisassociateRouteTable サブネットとルートテーブルの関連付けを解除する
ec2:EnableVgwRoutePropagation 仮想プライベートゲートウェイ(VGW)が、VPCの指定されたルートテーブルにルートを伝播できるようにする(Enableにする)
ec2:EnableVolumeIO I/O操作が無効になっているボリュームに対してI/O操作を有効にする
ec2:EnableVpcClassicLink ClassicLink用のVPCを有効にする
ec2:EnableVpcClassicLinkDnsSupport VPCがClassicLinkのDNSホスト名解決をサポートできるようにする
ec2:GetConsoleOutput 指定されたインスタンスのコンソール出力を取得する
ec2:GetConsoleScreenshot 実行中のインスタンスのJPG形式のスクリーンショットを取得する
ec2:GetHostReservationPurchasePreview ハードウェア専有ホストの設定と一致する設定で予約の購入をプレビューする
ec2:GetPasswordData Windowsを実行しているインスタンスの暗号化された管理者パスワードを取得する
ec2:GetReservedInstancesExchangeQuote 指定されたコンバーチブルリザーブインスタンスの値と期間に関する詳細を取得する
ec2:ImportImage ボリュームのディスクイメージまたはEBSスナップショットをAmazon Machine Image(AMI)にインポートする
ec2:ImportInstance ディスクイメージのメタデータを使用してインポートインスタンスタスクを作成する
ec2:ImportKeyPair サードパーティのツールで作成したRSAキーペアから公開キーをインポートする
ec2:ImportSnapshot ディスクをEBSスナップショットにインポートする
ec2:ImportVolume ディスクイメージのメタデータを使用してインポートボリュームタスクを作成する
ec2:ModifyHosts 専用ホストの自動配置設定を変更する
ec2:ModifyIdentityIdFormat IAMユーザー、IAMロール、またはアカウントのルートユーザーのリソースのID形式を変更する
ec2:ModifyIdFormat リソースのIDフォーマットをリージョンごとに変更する
ec2:ModifyImageAttribute AMIの指定された属性を変更する
ec2:ModifyInstanceAttribute インスタンスの指定された属性を変更する
ec2:ModifyInstancePlacement 停止したインスタンスインスタンス親和性値を設定する
ec2:ModifyNetworkInterfaceAttribute ネットワークインターフェイス属性を変更する
ec2:ModifyReservedInstances リザーブインスタンスアベイラビリティゾーン、インスタンス数、インスタンスタイプ、またはネットワークプラットフォーム(EC2-ClassicまたはEC2-VPC)を変更する
ec2:ModifySnapshotAttribute スナップショットの権限設定を追加または削除する
ec2:ModifySpotFleetRequest スポットフリート要求を変更する
ec2:ModifySubnetAttribute サブネットの属性を変更する
ec2:ModifyVolume ボリュームサイズ、ボリュームタイプ、IOPS容量など、既存のEBSボリュームのいくつかのパラメータを変更する
ec2:ModifyVolumeAttribute EBSボリュームの属性を変更する
ec2:ModifyVpcAttribute VPCをの属性を変更する
ec2:ModifyVpcEndpoint VPCエンドポイントの属性を変更する
ec2:ModifyVpcPeeringConnectionOptions PCピアリング接続の一方の側でVPCピアリング接続オプションを変更する
ec2:MonitorInstances 実行中のインスタンスの詳細な監視を有効にする
ec2:MoveAddressToVpc EC2-ClassicプラットフォームのElasticIPをEC2-VPCプラットフォームに移動する
ec2:PurchaseHostReservation 専用ホストの予約を購入する
ec2:PurchaseReservedInstancesOffering アカウントで使用するリザーブインスタンスを購入する
ec2:PurchaseScheduledInstances 指定されたスケジュールで1つまたは複数のスケジュールされたインスタンスを購入する
ec2:RebootInstances インスタンスを再起動する
ec2:RegisterImage AMIを登録する
ec2:RejectVpcPeeringConnection VPCピアリング接続要求を拒否する
ec2:ReleaseAddress ElasticIPアドレスを解放する
ec2:ReleaseHosts オンデマンドの専用ホストを開放する
ec2:ReplaceIamInstanceProfileAssociation 実行インスタンスのIAMインスタンスプロファイルを置き換える
ec2:ReplaceNetworkAclAssociation サブネットが関連付けられているネットワークACLを変更する
ec2:ReplaceNetworkAclEntry ネットワークACLのエントリ(ルール)を置き換える
ec2:ReplaceRoute VPC内のルートテーブル内の既存のルートを置き換える
ec2:ReplaceRouteTableAssociation VPC内の特定のサブネットに関連付けられたルートテーブルを変更する
ec2:ReportInstanceStatus インスタンスの状態に関するフィードバックを送信する
ec2:RequestSpotFleet スポットフリート要求を作成する
ec2:RequestSpotInstances スポットインスタンス要求を作成する
ec2:ResetImageAttribute AMIの属性をデフォルト値にリセットする
ec2:ResetInstanceAttribute インスタンスの属性をデフォルト値にリセットする
ec2:ResetNetworkInterfaceAttribute ネットワークインターフェイスの属性をリセットする
ec2:ResetSnapshotAttribute スナップショットの権限設定をリセットする
ec2:RestoreAddressToClassic EC2-VPCプラットフォームに移動されたElasticIPアドレスをEC2-Classicプラットフォームに戻す
ec2:RevokeSecurityGroupEgress セキュリティグループのアウトバウンド設定を削除する
ec2:RevokeSecurityGroupIngress セキュリティグループのインバウンド設定を削除する
ec2:RunInstances インスタンスを起動する
ec2:RunScheduledInstances スケジュールされたインスタンスを起動する
ec2:StartInstances EBS-backedインスタンスを開始する
ec2:StopInstances EBS-backedインスタンスを停止する
ec2:TerminateInstances インスタンスを削除する
ec2:UnassignPrivateIpAddresses セカンダリプライベートIPアドレスをネットワークインターフェイスから割り当てを解除する
ec2:UnmonitorInstances インスタンスの詳細な監視を無効にする

シェルスクリプトのデバッグ時に使えるbashのオプション5選

シェルスクリプトデバッグしていてよく使うオプションを5つ紹介します!

/bin/bash -e ./script.sh

シェルスクリプトの中でエラー(終了ステータスが0以外)が発生した場合、そこでスクリプトを終了します。
ただし、自分の意図と反して終了することもあるので注意が必要。
(diffで差分があったときの終了ステータスが1だと知らず結構ハマりました。)

実行例

スクリプトの内容

#!/bin/bash
diff foo.txt bar.txt
echo "wawawa"

結果

kabegiwa$ /bin/bash -e ./script.sh
1c1
< foo
---
> bar

最後のecho "wawawa"が実行されていないことがわかる

/bin/bash -u ./script.sh

定義されていない変数が使われた際にそこでエラー終了とするオプションです。
たとえば以下のようなスクリプトを実行した時にrm -rf /が発行されるのを防いでくれます。

実行例

スクリプトの内容

path=wawawa/tmp
rm -rf /${pasu}

結果

kabegiwa$ /bin/bash -u ./script.sh
./script.sh: 行 3: pasu: 未割り当ての変数です

/bin/bash -x ./script.sh

シェルスクリプトで実行した結果を変数の仲間で含めてすべて標準出力してくれます。

実行例

スクリプトの内容

foo=wawawa
bar=sasasa

echo ${foo}
echo ${bar}

結果

kabegiwa$ /bin/bash -x ./script.sh
+ foo=wawawa
+ bar=sasasa
+ echo wawawa
wawawa
+ echo sasasa
sasasa

/bin/bash -v ./script.sh

これもデバッグで利用できるものですが、/bin/bash -xオプションとは違い、変数をそのまま変数名で表示してくれます。

実行例

スクリプトの内容

foo=wawawa
bar=sasasa

echo ${foo}
echo ${bar}

/bin/bash -xスクリプトの内容は同じ

結果

kabegiwa$ /bin/bash -x ./script.sh
#!/bin/bash
foo=wawawa
bar=sasasa

echo ${foo}
wawawa
echo ${bar}
sasasa

/bin/bash -n ./script.sh

実際にシェルスクリプトを実行することなく文法チェックをすることができます。

実行例

結果(文法に問題がない場合)

kabegiwa$ /bin/bash -n ./script.sh
kabegiwa$

なにも出力されない

結果(文法に問題がある場合)

kabegiwa$ /bin/bash -n ./script.sh
script.sh: 行 6: 予期しないトークン `fi' 周辺に構文エラーがあります
script.sh: 行 6: `fi'

RaspberryPiで半固定抵抗のアナログ値を読み取ってみる

さて、今回はRaspberryPiでアナログ値をデジタル値に変換する「AD変換」をADコンバータをつかって半固定抵抗の値を見ていきたいと思います。

↓参考文献

必要なもの

  • ADコンバータ(今回は以下に入っていたMCP3008をつかっています)
  • 半固定抵抗

配線図

f:id:kabegiwakun:20170825201303p:plain

かなり複雑になってきました…
配線図の真ん中の黒いものがADコンバータというもので、アナログ値をデジタル値に変換するものです。
電圧というアナログの値をを0~4095というデジタルの値に変換し、RaspberryPiに読み込ませるためのものです。

配線図にある丸いものが半固定抵抗です。ネジをまわすことで電圧の調節ができます。

ADコンバータのピン機能表

f:id:kabegiwakun:20170825202229p:plain
(くわしくは以下から) http://akizukidenshi.com/download/ds/microchip/mcp3008.pdf

各ピンはそれぞれ以下のような機能を持っています。

  • VDD - 電源
  • VREF - 基準電圧入力
  • AGND - アナログアース(GND)
  • CLK - シリアルクロック
  • Dout - シリアルデータアウト
  • Din - シリアルデータイン
  • CS/SHDN - チップセレクト/シャットダウン入力
  • DGND - デジタルアース
  • CH0~7 - アナログ入力

コード

RaspberryPi

実際に動かしてみたところ


RaspberryPiで半固定抵抗のアナログ値を読み取ってみる

Google Apps Scriptで自動でメールを送信する

今回はGoogle Apps Script(GAS)をつかってメールの自動送信を実現したいと思います。

スクリプトの準備

まず、Googleスプレッドシートを起動します。 f:id:kabegiwakun:20170823132348p:plain

起動したらスプレッドシート上部のメニューから「ツール」→「スクリプトエディタ」を選択します。

f:id:kabegiwakun:20170823132620p:plain

スクリプトエディタが起動しますので以下のコードを貼り付けて、保存します。

Google Apps Script

f:id:kabegiwakun:20170823133422p:plain

スクリプトをつかって手動でメールを送信してみる

スプレッドシートに移動します。
以下のように1番上のセルに送信先メールアドレス、2番めのセルにメールのタイトル、3番目のセルにメールの本文を入力します。 f:id:kabegiwakun:20170823133933p:plain

スクリプトエディタに移動しまして、実行ボタンをクリックします。 f:id:kabegiwakun:20170823134157p:plain

「許可を確認」します。 f:id:kabegiwakun:20170823134352p:plain

自分の利用しているアカウントを選択します。 f:id:kabegiwakun:20170823134803p:plain

なんかものものしいメッセージが出てきますが、気にしません。
「詳細」を押して、安全ではないページに移動します。 f:id:kabegiwakun:20170823135034p:plain f:id:kabegiwakun:20170823135558p:plain

「許可」ボタンをおすとようやくメールが送信されます。
この手順は初回だけですのでご心配なく。次回からは実行ボタンをおしただけで送信できるようになります。 f:id:kabegiwakun:20170823135244p:plain

メールが送信されました。
今回わたしは自分宛てにメールを送ったので受信できたことで確認しています。 f:id:kabegiwakun:20170823135454p:plain

トリガを設定して自動でメール送信してみる

スクリプトエディタの「現在のプロジェクトのトリガー」ボタンをクリックします。 f:id:kabegiwakun:20170823135812p:plain

「トリガーが追加されていません。いますぐ追加するにはここをクリックしてください。」となっているリンクをクリックします。 f:id:kabegiwakun:20170823135920p:plain

するとトリガの設定画面が表示されます。 f:id:kabegiwakun:20170823140045p:plain

トリガには以下のような設定が可能ですそれらについてすこし解説します。

  • 時間主導型 1時間に一回メール送信や、1週間に一回など時間景気で自動でメール送信できるようになります。

  • スプレッドシートから スプレッドシートを起動したときや、値を編集した際にメールを送信するといった設定が可能です。これを利用することで例えばメール本文のセルを編集したタイミングで自動でメールを送る。といったことも実現できます。

任意のイベントをえらび、保存ボタンを押します。 f:id:kabegiwakun:20170823140758p:plain

すると、設定したトリガーに応じて今後メールの送信が実施されます。

このトリガーはGoogleのサーバで実行されますのでPCの電源を停止したとしても自動で決まった時間などにメールを送ることが可能です。

おわりに

みなさんもGoogle Apps Scriptを利用して面倒な定型作業を自動化してみてくださいね!

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

RaspberryPiとタクトスイッチでトグル動作を実現してみる

今回はRaspberryPiとタクトスイッチをつかってトグル動作を実現してみようと思います。

そもそもトグル動作とは?

トグルとは、同じ操作によって二つの状態を交互に切り替えられるような仕組みのこと。操作画面上でそのような振る舞いをする要素を「トグルボタン」(toggle button)「トグルスイッチ」(toggle switch)などと呼ぶ。トグルボタンは、オンの状態でクリックするとオフに、オフの状態でクリックするとオンになるようなボタンで、メディアプレーヤーの再生と一時停止を切り替えるボタンなどによく使われる。

トグルとは - IT用語辞典

とのこと。
今回はタクトスイッチを一度押したらLEDが点灯し、もう一度おしたら消灯するようなものを作ってみようと思います。

配線図

f:id:kabegiwakun:20170821231646p:plain 前回のものから10kΩの抵抗を除いただけのものです。

kabegiwa.hatenadiary.jp

コード

RaspberryPi

Pythonです。
ポイントとしては26行目のGPIO.add_event_detectです。
これはGPIO14のタクトスイッチが押されたとき、my_callback関数を呼んでLEDの接続されているGPIO15の状態を切り替えるという処理になります。

また、bouncetime=300の箇所はタクトスイッチが押されてから300ミリ秒は処理を受け付けない。という意味です。
なぜこのような設定をしているかというと、タクトスイッチを押してすぐは信号が安定しておらず、LEDのON/OFFが想定通りにいかない可能性があるからです。

実際に動かしてみたところ


かべぎわブログ RaspberryPiとタクトスイッチでトグル動作を実現してみる

Googleフォトが同期されない!そんなときは対応している拡張子を調べよう

みなさん、Googleフォトつかってますか?

このブログに掲載している写真はすべてGoogleフォトにあげて管理しているんですが、何枚かの写真(RaspberryPiでとったスクリーンショット)がいつまでたっても同期されない事態になったので自分的備忘録です。

単純に

拡張子が対応していなかったでござる。
pngの画像を何回もアップロードしては削除してを繰り返していましたけどそりゃだめだね。pngはフォトって感じじゃないですもんね…

Googleフォトで対応している拡張子

以下がGoogleフォトで対応している拡張子です。

写真

  • .jpg
  • .png
  • .webp

動画

  • .mpg
  • .mod
  • .mmv
  • .tod
  • .wmv
  • .asf
  • .avi
  • .divx
  • .mov
  • .m4v
  • .3gp
  • .3g2
  • .mp4
  • .m2t
  • .m2ts
  • .mts
  • .mkv

詳細はこちらから

support.google.com

【RaspberryPi】タクトスイッチでLEDをON/OFFさせてみる

今回はRaspberryPiとタクトスイッチをつかってLEDをON/OFFして見たいと思います。

配線図

f:id:kabegiwakun:20170820200225p:plain

ちょっと複雑ですね。

役割としては以下の2つに分かれています。

コード

gist126c5015b8220925921af1430eb4a24b

かんたんに説明すると
まず7行目GPIO.setup(15,GPIO.OUT)でLEDと接続しているGPIO15のを出力設定を行っています。

8行目はタクトスイッチとつながっているGPIO14の設定です。GPIO.setup(14,GPIO.IN)とすることで入力設定を行います。INが入力でOUTが出力です。

13行目はタクトスイッチの状態によっての分岐です。タクトスイッチが押されている状態がGPIO.input(14) == GPIO.HIGHですのでGPIO.output(15,GPIO.HIGH)でLEDを点灯させています。

実際にやってみたところ


【RaspberryPi】タクトスイッチでLEDをON/OFFさせてみる