- 投稿日:2021-02-25T19:29:26+09:00
Macのデスクトップに動画ファイルが追加されたら、自動的にGifを生成してみる
はじめに
普段アプリ開発をしているときに動作確認した結果をGifでPRに載せたりするのですが、
.mov
や.MP4
の動画ファイルからFFmpegでGifを生成するのを自動化できないかなーと思い、やってみました!準備
動画ファイルからGifを生成するのにFFmpegを使用するので、ダウンロードしておきます。
Homebrewからでもインストールできます。
$ brew install ffmpegAutomatorでWorkflowを作成する
Macの作業を自動化するということで、今回は標準で用意されている
Automator
を使用します!まずは、Automatorを起動して、フォルダアクションを新規作成します。
左上の検索欄に「シェルスクリプト」と入力してアクションを検索をして、「シェルスクリプトを実行」のアクションを右側にドラッグします。
「入力の引き渡し方法」を「引数として」に変更して、以下のスクリプトを書きます。
fpsやscaleなど、ffmpegの設定値の部分は、お好みで調整してください(*・ω・*)# 1 originalFilePath=$1 # 2 if [[ $originalFilePath == **".mov" ]] || [[ $originalFilePath == **".MP4" ]] || [[ $originalFilePath == **".mp4" ]]; then uuid=$(uuidgen) uuidFilePath=$originalFilePath-$uuid # 3 /usr/local/Cellar/ffmpeg/4.3.1_9/bin/ffmpeg -i $originalFilePath -filter_complex "[0:v] fps=20,scale=320:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" $uuidFilePath.gif fi
# 1
の行で、引数で受け取った動画ファイルのPATHを変数に格納しています。
# 2
のif文で、動画ファイルの拡張子を.mov
.MP4
.mp4
の3つに限定しています。
Gifファイルがデスクトップに追加された場合もWorkflowが動くので、条件を指定しないと、自動生成されたGifファイルから新しいGifファイルを作り出そうとして、無限にGifを作り続けてしまいます(´;ω;`)
# 3
でffmpegを実行していますが、/usr/local/Cellar/ffmpeg/4.3.1_9/bin/ffmpeg
の部分は、ffmpegが格納されているPATHを指定する必要があるので、適宜変更してください。
/Applications/ffmpeg
とかの場合もあるかもしれません。「command + S」で、適当な名前を付けて保存します。
これで、保存して終了です!
デスクトップに.mov
や.MP4
またはmp4
のファイルが追加されると、gifを生成してくれるようになります。さいごに
デスクトップに動画を追加したら、Gifを作ってくれるようになりました
↑のGifでは別のディレクトリからドラッグしてデスクトップに動画を追加していますが、
QuickTime Playerとかで画面収録をしたら、Desktopに動画保存されるので
そこから勝手にGif作ってくれるといった感じです\(。・o・。)/ちなみに、iOSのアプリ開発であれば、
以下のようなxcrunコマンドでiPhone Simulatorの動画を撮ることもできるので、
その時にもデスクトップに動画ファイルを保存すれば勝手にGif作ってくれます!
xcrun simctl io booted recordVideo output.mov
- 投稿日:2021-02-25T17:31:44+09:00
情報工学部の学生が持つべきパソコンとは(単なる昔話です)
Quoraでバズってしまった投稿
Quoraは他言語の回答を翻訳することができます。私もいくつか面白そうな回答を翻訳してみました。そのうちの1つが予期せずバズっているようです。どうやらマックユーザーの怒りを買ってしまったようで…。
情報工学部の学生にはMacとWindowsのどちらが適していますか?
はてなブックマークにも転載されていました。
情報工学部の学生にはMacとWindowsのどちらが適していますか? - Quora
これはそのうちのコメントの1つ。
元質問への多数の回答のなかで、upvoteもそう多くなく、内容もそれほど注目すべき点がない本回答を林田さんが訳出した理由が知りたい。
その理由は、「Quoraで翻訳できる回答は1質問につき1人1つまで」というルールを知らなかったからです。
これはQuoraで私が一番最初に翻訳した回答でした。同じ質問の別の回答を翻訳して投稿しようとしてエラーが出るまで、そんなルールがあったとは思いもよりませんでした。そのため「ベストな選り抜きの回答を選ぼう」って意識がないまま、なんとなく訳したのでした。
あまりに低レベルな世界で笑ってしまったというのも、この回答を選んで訳した理由です。
なおこれはあくまで翻訳であり、私の意見ではありませんので念のため。
おじさんが学生の頃は…
入学前夜
私のQuoraのプロフィールを見た人から、本当に情報工学部出身なのかと疑う声がありました。そこでちょっと、私が学生だった頃の話をすることにします。まぁ何の含蓄もないただの昔話です。皆さんの反応を見て、Linuxを押さえておけば間違いなし、みたいな風潮を感じたので、私の時代の話をしたらちょっと驚かれるかもしれないな、と思ったので…。
大学の話をする前に、入学直前あたりの当時のパソコン業界の状況を話しておかなければなりません。高校生の頃は8ビットパソコンが主流でした。主流と言っても、校内でパソコンを持っている生徒は10人ほどしかいません。機種もバラバラ。私はX1 Truboでしたが、他の人はPC8801とかFM77とか。
PC8801が大ヒットしてゲームが急増したのはSRからです。私の友人はSR前のmk IIを持っており、殆どのゲームを遊べないただの箱でした。当時のパソコンはディスプレイ込みで30万円以上するような高級品であり、もし失敗してもそう簡単には買い換えられません。
PC9801が出てきたのもこの頃。対応ゲームはVM以降でしか動かず、VMより古い98はゴミでした。価格が高かったこともあり、最初の数年は大戦略、信長の野望、三国志といったオヤジ向けのシミュレーションゲームばかりで、ゲーム目的で98を買う流れができたのは私が大学に入った後だったと思います。
この当時の状況を改めて総括すると、次のようになります。
- パソコンを持っている人は、ほとんどいない。
- ノートパソコンが存在しない。
- パソコンのOSはBASICインタープリタとMS-DOSしか選択肢がない。
- PC9801がメジャーになろうとしていた。
なおMacは100万円以上する高級品で、OSもClassic OSでありUNIXではなく、とにかく当時は実物を見たことがありませんでした。
大学の入学祝はX68000でした。20MBのHDDを搭載していました。GBではないですよ。MBです。当然、大学で使うことを想定した機種の選定などしていません。
当時の情報工学部の環境
さてこの状況で大学の実習環境はどうだったかというと、286が搭載されたPC9801をターミナルとして、ACOSというメインフレーム機を使うという形がメインでした。当然パソコンを持っている同級生はほとんどいません。ましてやノートパソコンなんてものはこの当時まだ存在せず、自分のパソコンを学校に持ってくるなんてことはありえません。自宅から大学のACOSに繋ぐ方法もありません。
またUNIXを使った実習では、アポロやNeXTといったワークステーションを使えましたが、電子工学部などと共有しており自由に使えませんでした。雑誌で見るNeXTは凄いクール。しかし実際に触ってみるとなかなかに使いづらいものでした。HDDは搭載されておらず、5インチのMOが唯一のストレージとして搭載されていました。共有プリンターでエラーが出ると教室のスピーカーからエラーメッセージが英語で流れるのがかっこよかったです。
今では信じられないかもしれませんが、当時はUNIXは非常にマイナーな存在でした。当時の企業はPC9801やFM16βといったMS-DOSパソコンを使うのが普通でした。また銀行や企業のバックボーンはメインフレームであり、UNIXではなかったことでしょう。CAD等の限られた業務でのみUNIXワークステーションが使われており、映画業界でも実験的にCGが使われた程度で、市場規模は非常に小さく、大学では一応知っておいて損はないよという扱いでした。UNIX(フレーバー含む)が爆発的に普及するとは誰も想像しておらず、全く新しいアーキテクチャのOSが今後も続々出てくるだろうと思われていました。
当時のインターネット
そもそもインターネットがありません。正確には存在していましたが、大学や一部の企業だけのものでした。大学のネットワークは10Base-Tではなく、同軸ケーブルをリング状につないだもの。ネットワークカードは1枚30万円でパソコン本体より高価でした。
もちろんインターネットプロバイダも存在していません。ニフティサーブというパソコン通信に電話をつなぎ、X68000から大学の研究室が設置した野良ftpにログインして遊んでました。ウェブサーバをUNIXで立てて巨大なネットワークを形成するみたいな、今では当たり前のことは、当時は想像もつかなかったのです。
当時のコンパイラ
コンパイラの実行環境も貧弱でした。高校生の時にX1 Turboで動くCP/Mと、C言語のサブセットであるAlpha Cを合わせて5万円くらい出して買いました。CP/Mについていたアセンブラは8080用で、Z80のインデックスレジスタや裏レジスタを使えませんでした。Alpha Cはinclude文がなく、ライブラリをリンクする機能もなかったと思います。何万円もするコンパイラの話ですよ。
CP/Mはサブディレクトリ機能がありません。2Dのフロッピー容量は320KBだけで、いくつかテキストファイルを入れただけですぐいっぱいになってしまうので、サブディレクトリは不要でした。
PC9801は当時持っていなかったので詳しくないのですが、gccでC++のソースコードをコンパイルできそうでできない、みたいなところで世の中の皆さんが頑張っていた覚えがあります。そう、C++のコンパイルができなかったのです。当時テンプレートがあったかどうかは定かではありません。その点メモリが数MBも使えるX68000ではgccでのコンパイルが可能でした。
卒業研究はACOS上で動く経路探索アプリをCOBOLで書くという無駄なことをしていました。基本的に、学生が全員自宅にコンパイラが走るパソコンを持っているという前提にはなっていませんでした。
当時のPC
当時はパソコンと言えばPC9801であるのが普通でした。IBM-PCは漢字を表示できませんでした。そのうちAXというIBM-PCに漢字表示のハードを乗せたパソコンが出ましたが、あまりに高価なので一瞬で消えました。ソフトで日本語を表示できるDOS/Vが出たのは、大学を出てからしばらく経ってからです。
Windowsはありませんでした。正確にはWindows 2にあたるWindows 286とか386というものがありましたが、事実上存在しない空気でした。私が社会人になった直後くらいにWindows 3.1がようやく出て、徐々に世界が変わる兆しが見えてきました。
DOS/Vは仕事の流れで初めて使いました。SVGAで画面を広く表示できるようになり、自分でも486のPC互換機を買いました。まだPC9801が主流で、PC互換機ユーザーとして割と早い方でしたね。
LinuxやFreeBSDは存在しなかったか、少なくともパソコンが非力すぎて実用レベルではなく、UNIXを個人で使おうと思ったらワークステーションを買わないといけなかったわけで、UNIXフレーバーの個人使用はまだ現実的ではありませんでした。
結局、情報工学部の学生が持つべきパソコンとは
今時は、MacでもLinuxでもWindowsでも、なんとかなるんじゃないでしょうか(適当)。私自身、ほとんどメインフレームしか習っていませんが、RTOS、Windows、Linuxで色々なドライバやネイティブアプリやウェブアプリを書いてきており、なんとかなりました。
おじさんの時代と違って、今は環境が素晴らしく整っており、実践的なことを学べるでしょう。また今の技術があっという間に廃れてしまうことも、多分ないでしょう。羨ましいことです。おじさんの学生時代の経験からは、今の人にアドバイスできそうなことは何もありません。
- 投稿日:2021-02-25T16:44:07+09:00
Macでシンボリックリンクを使って「cd」で移動できるエイリアスを作る
いつも忘れてしまうので忘却録
iCloudのディレクトリにコマンドラインで移動したいときにパスが長く面倒なのでエイリアスを作りたい。
GUIのエイリアスではcdコマンドが使えず不便なので、シンボリックリンクで作成する。ln -s "iCloudのPath"これでcdコマンドで移動できるようになる。
- 投稿日:2021-02-25T14:27:24+09:00
Mac M1マシン導入メモ
はじめに
個人用に愛用していたMac Book Airが突然お亡くなりに。
やむを得ず至急購入したMac M1マシンの作業メモを残しておくことにする。購入機種
添付の画面のとおり。実は最初はM1ほしさにMac Book Airを買うつもりだった。
即必要だったのだが、Airは金色の機種しか在庫がないとのこと。
仕方ない、使えればいいかと思いかけたとき、店員から「Mac Book Proも13インチならM1でっせ」と甘いささやきが。ということで、想定外のProを購入することになった。外観は、こんな感じ。
初期セットアップ
実は、初期セットアップにかなり手間取ってしまった。言語とか、地域とはを普通に選んだ後で、リストアするバックアップ元を指定する画面が出てくる。今回はリストアもなにもマシンが死んでいるのでなにもできないのだが、一見スキップの選択肢がない画面に見えた。
よく見ると、左下にスキップの選択肢があったのだが、それに気づかず、10分くらい余分にかかってしまった。指紋認証
下の写真のようにキーボードの右上が、指紋認証のセンサーになっていて、ログインとかソフト導入時には、パスワードを打たなくていいようになっている。スマホでは当たり前の機能だが、古いMacになれている人間にはとても便利に感じた。
ソフトの導入
以下に導入したソフトの一覧と、導入時の注意点をメモしておく。
Chrome
特に問題なく、普通に導入できたはず。
https://www.google.com/chrome/browser/desktop/index.html
MS Office
パソコンと同時にサブスクリプション版を購入した。
https://microoffice365.com/support
から、画面のガイドのとおり、ユーザー登録、ソフトのダウンロードとやって、すぐに使えるようになった。
mi
自分はテキストエディタはずっとこれを使っている。特に問題なく使えた。
https://www.mimikaki.net/download/
ATOK
体がATOKに慣れてしまっているので、これなしではパソコンが使えない。
上記URLから、インストールのタブを表示してインストーラをダウンロード、実行する。
途中で、Rosetta2を導入するようなガイドが表示される。https://www.justsystems.com/jp/os/macos11/#bigsurAS
ガイドのとおり、導入すると普通にATOKも使えるようになった。詳しくわかっていないが、Rosetta2というのは、M1マシンでインテル用のバイナリを動かすための仕組みらしい。
Github Desktop
下記リンクから普通にzipファイルをダウンロード、解凍、アプリケーションフォルダに移動で完了。
HomeBrew
ターミナルから普通に下記コマンド実行で対応
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Zoom
すでにm1対応バイナリが出ている。
https://zoom.us/client/latest/Zoom.pkg?archType=arm64
これで問題なく使えた。ちなみに、前のパソコンは機種が古くてZoomの仮想背景が使えなかった。これでようやく人並みに仮想背景が使えるようになり、大変うれしい。
anaconda
この辺から手強いソフトが増えてくる。
https://www.anaconda.com/products/individual
から64bit graphical installerというのを選択、導入する。最終的なリンクはこちら。
https://repo.anaconda.com/archive/Anaconda3-2020.11-MacOSX-x86_64.pkg
導入自体が普通にできて、GUIのアプリも普通に使えるのだが、一カ所戸惑ったのが、ターミナルからコマンドラインでjupyter notebookとかpipコマンドが普通に使えない点。
anacondaは、ホームディレクトリの.bash_profileに必要な環境設定などをするのだが、どこかのタイミングでデフォルトのシェルがzshに変わったらしく、この設定が空振りになっていた。
対策としては、.zshrcを新たに作り、anacondaの生成した.bash_profileの中身をまるごとコピーした。これで、普通にjupyter notebookをコマンドライン起動できるようになった。PyTorch用に以下のコマンドを実行
pip install torch pip install japanize_matplotlib pip install torchviz pip install torchsummary pip install torchvisionさらに以下のリンクからgraphvizを導入
http://ruby.kyoto-wu.ac.jp/info-com/Softwares/Graphviz/
これで、PCのJupyter NotebookからPytorchが動くようになった。
ただし、PyTorchからGPUが使えようになるのは、まだまだ先らしい。https://github.com/pytorch/pytorch/issues/47702
TexShop (Latex用GUIソフト)
以前に自分で作った以下のメモを参考に
https://qiita.com/makaishi2/items/ac284987f158f7853771
次の2つのコマンドを実行
$ brew install mactex --cask $ sudo /usr/local/texlive/2020/bin/x86_64-darwin/tlmgr update --self --allこれで使えるようになった。
Tex2img
書籍の原稿執筆用にLatexからPDFを作るのに不可欠なソフト
なぜか、デフォルトのTexShop導入時点で、ghostscriptへのパスが通っていなく、以下のコマンドをマニュアルで打つ必要があった(原因不明。。)sudo ln -s /opt/homebrew/Cellar/ghostscript/9.53.3_1/bin/gs /usr/local/bin/gsStation TV Link
Sonyのレコーダーやnasneに録画したビデオをパソコンから見ることのできる優れもののソフト
http://www.pixela.co.jp/products/tv_capture/stationtv_link/support.html#download-mac
にM1対応版があり、アプリ起動時のエラーはこのバイナリで出なくなったが、なぜか肝心のレコーダー/nasneにアクセスできず、新しいPCになってから、まだビデオを見れていない。。
要調査。
- 投稿日:2021-02-25T12:46:13+09:00
UTMを使ってM1 MacにUbuntu20.04をインストールして、その中でDockerを動かして、その中でUbuntu20.10を動かしてみる
Macの仮想化ソフトウェアというと、VirtualBox、VMware Fusion、Parallels Desktopといったプロダクトが代表的なところかと思いますが、この中でApple M1への対応が進んでいるのはParallels Desktopが先行している状況のようです。
- Apple M1 チップを搭載した Mac への Parallels Desktop 対応状況について
- Mac版仮想化アプリParallels、AppleシリコンM1対応に積極的。仮想PCでWindowsが動くか
- M1 Mac向けにArm版Windows提供? MSとParallelsが正式に協力か
- 仮想化アプリParallels、M1 Mac上でArm Windowsを中断|再開できるテクニカルプレビュー2公開
- Parallels Desktop for Mac with Apple M1 chip (Apple Silicon)
上記のプロダクト以外にMac上で仮想環境を実現する方法としてはAppleが提供しているVirtualization frameworkを利用することで可能とのこと。
Appleの開発者フォーラムではVirtualization frameworkを利用したSimpleVM、vm-lite、virtualというプロダクトのGitHubのリポジトリが紹介されています。
「Setting up Linux VM on Apple Silicon for Docker」という記事にSimpleVMを利用したUbuntu上でDockerを起動するまでの手順が掲載されていたので実際にやってみたところ、Ubuntuが起動することは確認できましたが、vmlinuzとinitrdを準備するところが非常に煩雑だと感じました。
こうなると、やはりVirtualBoxやVMware Fusionのような仮想化のGUIフロントエンドが欲しくなります。そういった声に応えてくれるのがUTMやACVMといったQEMUラッパーです。
- iOSデバイス上に仮想マシンを作成できるアプリ「UTM」がApple Silicon Macをサポートし、M1チップ搭載のMac上にARM64版WindowsやUbuntuをインストール可能に。
- UTMとOpenCoreを利用し、x86版macOS 10.14 MojaveをApple Silicon Mac上で動作させることに成功したもよう。
- Apple M1チップ搭載のMacでARM版Windows 10を動作させるQEMUラッパー「ACVM」がリリース。
前置きが長くなりましたが、それではUTMを使ってM1 MacにUbuntuをインストールしていきましょう。
手順についてはUTMのリポジトリの「Install Ubuntu ARM64 on Apple M1」というWikiか、もしくは、UTMのページの「Ubuntu 20.04」にキャプチャ付きでまとめられてるので、実はここを見れば一発なんですが今回はUTMをインストールするところから説明していきます。UTMのリリースページからMac用のインストールバイナリ(UTM.dmg)をダウンロードしてインストールします。(2020年2月25日時点ではv2.0.22が最新版のようです。)
次に、Ubuntu Server for ARMのページからARM版のイメージ(ISOファイル)をダウンロードします。今回は「20.04.2 LTS」を利用することとします。
あとは先程紹介したインストール手順に従い進めていきます。
画面上段の「+」ボタン、もしくは、「Create a New Vitural Machine」のアイコンをクリックします。
InformationタブのName欄に「Ubuntu 20.04」と入力し、Styleから「Operating System」を選択します。
Architectureから「ARM64 (aarch64)」を選択すると、自動的にSystemから「QEMU 5.2 ARM Virtual Machine (alias of virt-5.2) (virt)」が選択されます。
Memoryについては環境によって設定可能な値が変わってくると思いますが、今回は8192MB(8GB)で設定してみます。
「New Device」ボタンをクリックし、Interfaceで「VirtIO」が選択された状態でSizeに「10GB」と入力します。
もう一度「New Device」ボタンをクリックします。「Removable」にチェックすると、Interfaceで「USB」が選択された状態となります。
「Save」ボタンをクリックすると、仮想マシンの枠ができあがります。
「CD/DVD」の欄をクリックすると「Browse」と表示されるのでこれをクリックします。
再生アイコン(起動ボタン)をクリックすると仮想マシンが起動します。
事前に作成したCD/DVDドライブより先にハードディスクの方を起動ドライブとして認識しているため起動できない状態となっています。
「UEFI QEMU QEMU USB HARDDRIVE」を選択します。
Ubuntuのインストール画面が表示されるので「Install Ubuntu Server」を選択します。
Ubuntuの詳細なインストール手順については割愛します。
インストール後に利用したいパッケージが決まっているのであれば、「Featured Server Snaps」の画面で選択しておきます。今回はdockerを選択しました。
インストールが完了したら一旦仮想マシンを停止し、CD/DVDの「Clear」を選択して再度仮想マシンを起動します。
GRUBの画面が表示されますので、「Ubuntu」を選択します。
インストール時に設定したアカウントでログインし、unameと/etc/os-releaseを確認してみます。
sudo apt-get -y install ubuntu-desktop
を実行してデスクトップ環境をインストールしてみます。
インストールが完了したら
sudo reboot
で再起動します。
Ubuntuのインストール時にDockerをインストールしていたので、Dockerのバージョン情報を表示してみます。
docker image pull (もしくは docker pull)
を実行してUbuntu 20.10のイメージを取得し、docker image ls (もしくは docker images)
でイメージが取得できているか確認します。
docker container run (もしくはdocker run)
でコンテナのシェルを表示し、unameと/etc/os-releaseを確認してみます。
- 投稿日:2021-02-25T03:56:02+09:00
MacでM5stack Core2 for AWS その2
0. はじめに
前回はQiitaを書くのに疲れてしまい、
投稿はESP-IDFまでと中途半端に終わってしまったので
今回はLチカまで進めます。
ドキュメントはここのAWS CLIのインストールからです。例によってエラーとの格闘です
1. AWS CLIインストール
AWSアカウントも何もないところからだと、ちと面倒ですが、
ココを乗り越えないと先に進めませんので、
ドキュメント通りにAWSのアカウント作成、AWS CLIのインストール、
aws configureを行います2. Minicondaインストール
ドキュメント通り進めます。
私はココのPython3.8のpkgをインストールしました。ドキュメントにある、edukit環境作成とedukit環境への切り替えは
下の通りうまくいきました(base) オレ@MacBook ~ % conda create -n edukit python=3.7 Collecting package metadata (current_repodata.json): done Solving environment: done ## Package Plan ## environment location: /Users/オレ/opt/miniconda3/envs/edukit added / updated specs: - python=3.7 The following packages will be downloaded: package | build ---------------------------|----------------- ca-certificates-2021.1.19 | hecd8cb5_0 121 KB certifi-2020.12.5 | py37hecd8cb5_0 140 KB openssl-1.1.1j | h9ed2024_0 2.2 MB pip-21.0.1 | py37hecd8cb5_0 1.8 MB python-3.7.9 | h26836e1_0 19.7 MB readline-8.1 | h9ed2024_0 333 KB setuptools-52.0.0 | py37hecd8cb5_0 721 KB wheel-0.36.2 | pyhd3eb1b0_0 33 KB ------------------------------------------------------------ Total: 25.0 MB The following NEW packages will be INSTALLED: ca-certificates pkgs/main/osx-64::ca-certificates-2021.1.19-hecd8cb5_0 certifi pkgs/main/osx-64::certifi-2020.12.5-py37hecd8cb5_0 libcxx pkgs/main/osx-64::libcxx-10.0.0-1 libedit pkgs/main/osx-64::libedit-3.1.20191231-h1de35cc_1 libffi pkgs/main/osx-64::libffi-3.3-hb1e8313_2 ncurses pkgs/main/osx-64::ncurses-6.2-h0a44026_1 openssl pkgs/main/osx-64::openssl-1.1.1j-h9ed2024_0 pip pkgs/main/osx-64::pip-21.0.1-py37hecd8cb5_0 python pkgs/main/osx-64::python-3.7.9-h26836e1_0 readline pkgs/main/osx-64::readline-8.1-h9ed2024_0 setuptools pkgs/main/osx-64::setuptools-52.0.0-py37hecd8cb5_0 sqlite pkgs/main/osx-64::sqlite-3.33.0-hffcf06c_0 tk pkgs/main/osx-64::tk-8.6.10-hb0a8c7a_0 wheel pkgs/main/noarch::wheel-0.36.2-pyhd3eb1b0_0 xz pkgs/main/osx-64::xz-5.2.5-h1de35cc_0 zlib pkgs/main/osx-64::zlib-1.2.11-h1de35cc_3 Proceed ([y]/n)? y Downloading and Extracting Packages setuptools-52.0.0 | 721 KB | ##################################### | 100% certifi-2020.12.5 | 140 KB | ##################################### | 100% wheel-0.36.2 | 33 KB | ##################################### | 100% ca-certificates-2021 | 121 KB | ##################################### | 100% readline-8.1 | 333 KB | ##################################### | 100% python-3.7.9 | 19.7 MB | ##################################### | 100% openssl-1.1.1j | 2.2 MB | ##################################### | 100% pip-21.0.1 | 1.8 MB | ##################################### | 100% Preparing transaction: done Verifying transaction: done Executing transaction: done # # To activate this environment, use # # $ conda activate edukit # # To deactivate an active environment, use # # $ conda deactivate次に環境の移動
(base) オレ@MacBookAir ~ % conda activate edukit (edukit) オレ@MacBookAir ~ %(base)から(edukit)に変わりました。
が、次のexport.shでまたコケました(edukit) オレ@MacBookAir ~ % . $HOME/esp/esp-idf/export.sh Setting IDF_PATH to '/Users/オレ/esp/esp-idf' Adding ESP-IDF tools to PATH... Using Python interpreter in /Users/オレ/opt/miniconda3/envs/edukit/bin/python Checking if Python packages are up to date... The following Python requirements are not satisfied: click>=5.0 pyserial>=3.0 future>=0.15.2 cryptography>=2.1.4 pyparsing>=2.0.3,<2.4.0 pyelftools>=0.22 gdbgui==0.13.2.0 pygdbmi<=0.9.0.2 reedsolo>=1.5.3,<=1.5.4 bitstring>=3.1.6 ecdsa>=0.16.0 Please follow the instructions found in the "Set up the tools" section of ESP-IDF Getting Started Guide Diagnostic information: IDF_PYTHON_ENV_PATH: (not set) Python interpreter used: /Users/オレ/opt/miniconda3/envs/edukit/bin/python Warning: python interpreter not running from IDF_PYTHON_ENV_PATH PATH: /Users/オレ/.espressif/tools/xtensa-esp32-elf/ 〜〜〜以下略〜〜〜Getting Started Guideを読みやがれと。。。
う〜ん、まあなんか
IDF_PYTHON_ENV_PATH: (not set)
が怪しそうだな。。。と思いつつも先に進める。。。3. デバイス証明書の取得と登録
(edukit) オレ@MacBookAir % cd Core2-for-AWS-IoT-EduKit/Blinky-Hello-World/utilities/AWS_IoT_registration_helper (edukit) オレ@MacBookAir AWS_IoT_registration_helper % pip3 install -r requirements.txtRequirement already satisfied: awscli>=1.18.202 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from -r requirements.txt (line 1)) (1.19.11) Requirement already satisfied: cryptography>=2.7 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from -r requirements.txt (line 2)) (3.4.6) Requirement already satisfied: pyasn1_modules==0.1.5 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from -r requirements.txt (line 3)) (0.1.5) 〜〜〜中略〜〜〜 Requirement already satisfied: chardet<5,>=3.0.2 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from requests->requests-aws4auth==1.0.1->-r requirements.txt (line 10)) (4.0.0) Requirement already satisfied: certifi>=2017.4.17 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from requests->requests-aws4auth==1.0.1->-r requirements.txt (line 10)) (2020.12.5) (edukit) オレ@MacBookAir AWS_IoT_registration_helper %なんかうまくいった模様
早速、デバイス証明書の取得と登録
シリアルデバイスは前のページと同じく
/dev/cu.usbserial-0225F023
を指定(edukit) オレ@MacBookAir AWS_IoT_registration_helper % python registration_helper.py -p /dev/cu.usbserial-0225F023 Pyserial is not installed for /Users/オレ/opt/miniconda3/envs/edukit/bin/python. Check the README for installation instructions. Traceback (most recent call last): File "registration_helper.py", line 42, in <module> import esptool ModuleNotFoundError: No module named 'esptool' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "registration_helper.py", line 49, in <module> import esptool File "/Users/オレ/esp/esp-idf/components/esptool_py/esptool/esptool.py", line 38, in <module> import serial ModuleNotFoundError: No module named 'serial'またエラー。。。
モジュールがないだけなので、何も考えずserialとesptoolをインストール!〜〜〜まずはserial〜〜〜 (edukit) オレ@MacBookAir AWS_IoT_registration_helper % pip install serial Collecting serial Downloading serial-0.0.97-py2.py3-none-any.whl (40 kB) |████████████████████████████████| 40 kB 4.5 MB/s Collecting future>=0.17.1 Using cached future-0.18.2.tar.gz (829 kB) Requirement already satisfied: pyyaml>=3.13 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (from serial) (5.3.1) Collecting iso8601>=0.1.12 Downloading iso8601-0.1.14-py2.py3-none-any.whl (9.5 kB) Building wheels for collected packages: future Building wheel for future (setup.py) ... done Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491059 sha256=52d0697b9ade772839886084076f64bc586b6c0869c69f501ce868c4d720f95a Stored in directory: /Users/オレ/Library/Caches/pip/wheels/56/b0/fe/4410d17b32f1f0c3cf54cdfb2bc04d7b4b8f4ae377e2229ba0 Successfully built future Installing collected packages: iso8601, future, serial Successfully installed future-0.18.2 iso8601-0.1.14 serial-0.0.97 〜〜〜つづいて esptool 〜〜〜 (edukit) オレ@MacBookAir AWS_IoT_registration_helper % pip install esptool Collecting esptool Downloading esptool-3.0.tar.gz (149 kB) |████████████████████████████████| 149 kB 9.1 MB/s Collecting bitstring>=3.1.6 Using cached bitstring-3.1.7.tar.gz (195 kB) 〜〜〜中略〜〜〜 Successfully built esptool bitstring reedsolo Installing collected packages: reedsolo, pyserial, bitstring, esptool Successfully installed bitstring-3.1.7 esptool-3.0 pyserial-3.5 reedsolo-1.5.4インストール完了!
ということで、再度チャレンジ(edukit) オレ@MacBookAir AWS_IoT_registration_helper % python registration_helper.py -p /dev/cu.usbserial-0225F023 〜〜〜なんかちょっとwarning...笑〜〜〜 Conda 'edukit' environment active... Python 3.7.x detected... AWS CLI configured for IoT endpoint: xxxxxxxxxxxxxx-ats.iot.us-west-2.amazonaws.com Checking module (1 of 13): awscli>=1.18.202 〜〜〜中略〜〜〜 Checking module (2 of 13): cryptography>=2.7 Requirement already satisfied: cryptography>=2.7 in /Users/オレ/opt/miniconda3/envs/edukit/lib/python3.7/site-packages (3.4.6) 〜〜〜13 of 13まで略〜〜〜 ----------------------------------------- Completed checking/installing package dependencies Generating ECDSA 256-bit prime field key... Generating self-signed x.509 certificate... Successfully created x.509 certificate with expiration in 365 days... Connecting.... Changing baud rate to 921600 Changed. RAM boot... Downloading 31364 bytes at 3ffb0000... done! Downloading 456 bytes at 3ffb8f28... done! Downloading 1028 bytes at 40080000... done! Downloading 107384 bytes at 40080404... done! Downloading 4 bytes at 4009a77c... done! All segments done, executing at 40081bf0 Wait for init - CLI Initialised >> >> Serial Number: 012345678901234567 Generating Manifest >> Crypto Authentication Root CA 002 -----BEGIN CERTIFICATE----- MIIB8TCCAZegAwIBAgIQd9NtlW7IrmI 〜〜〜中略〜〜〜MG1TrVv7HhhfdFyhYmA== -----END PUBLIC KEY----- Validate Device Certificate: OK 012345678901234567 reading slot 0 public key >> reading slot 1 public key >> reading slot 2 public key >> reading slot 3 public key >> reading slot 4 public key >> Generated the manifest file 012345678901234567_manifest.json in output_files Created policy Default Number of certificates: 1 Loading the manifest_item... Unique ID: 012345678901234567 Try importing certificate... Response: {'ResponseMetadata': {'RequestId': 'なんか', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 19 Feb 2021 15:54:26 GMT', 'content-type': 'application/json', 'content-length': '209', 'connection': 'keep-alive', 'x-amzn-requestid': 'なんか', 'access-control-allow-origin': '*', 'x-amz-apigw-id': 'a__P5HbyPHcF6FA=', 'x-amzn-trace-id': 'Root=なんか'}, 'RetryAttempts': 0}, 'certificateArn': 'arn:aws:iot:us-west-2:なんか:cert/なんか', 'certificateId': 'なんか'} Certificate import complete - returning MANIFEST_IMPORT SUCCESS arn:aws:iot:us-west-2:なんか:cert/なんか arn:aws:iot:us-west-2:なんか:thing/012345678901234567 Number of ThingIDs to check: 1 Checking the manifest item(1) Unique ID: 012345678901234567 Manifest was loaded successfullyおお、うまくいったようです〜!
4. ESP32ファームウェアの更新
(edukit) オレ@MacBookAir AWS_IoT_registration_helper % cd ../.. (edukit) オレ@MacBookAir Blinky-Hello-World % aws iot describe-endpoint --endpoint-type iot:Data-ATS { "endpointAddress": "xxxxxxxxxxxxxx-ats.iot.us-west-2.amazonaws.com" }上で表示されたエンドポイントを控えておきます
xxxxxxxxxxxxxx-ats.iot.us-west-2.amazonaws.com ←これで、Kconfigによる設定
(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py menuconfig The following Python requirements are not satisfied: pyparsing>=2.0.3,<2.4.0 pyelftools>=0.22 gdbgui==0.13.2.0 pygdbmi<=0.9.0.2 Please follow the instructions found in the "Set up the tools" section of ESP-IDF Getting Started Guide Diagnostic information: IDF_PYTHON_ENV_PATH: (not set) Python interpreter used: /Users/オレ/opt/miniconda3/envs/edukit/bin/python Warning: python interpreter not running from IDF_PYTHON_ENV_PATH PATH: /Users/オレ/.espressif/tools/ 〜〜〜中略〜〜〜 ESP-IDF v4.2-238-g8cd16b60fむー、またGuideを見やがれが出てConfig画面でない。。。
どうやら先にあったIDF_PYTHON_ENV_PATHがないのが気に入らないらしい。
が、そもそも何を設定するんだ???
ディレクトリを歩き回り、
/Users/オレ/opt/miniconda3/envs/edukit
こんなのがあったので、とりあえず(edukit) オレ@MacBookAir Blinky-Hello-World % export IDF_PYTHON_ENV_PATH="/Users/オレ/opt/miniconda3/envs/edukit"気を取り直して
(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py menuconfig The following Python requirements are not satisfied: pyparsing>=2.0.3,<2.4.0 pyelftools>=0.22 gdbgui==0.13.2.0 pygdbmi<=0.9.0.2 To install the missing packages, please run "/Users/オレ/esp/esp-idf/install.sh" Diagnostic information: IDF_PYTHON_ENV_PATH: /Users/オレ/opt/miniconda3/envs/edukit Python interpreter used: /Users/オレ/opt/miniconda3/envs/edukit/bin/python ESP-IDF v4.2-238-g8cd16b60fお、さっきと違うエラー。
install.shを実行せよと。(edukit) オレ@MacBookAir Blinky-Hello-World % /Users/オレ/esp/esp-idf/install.sh Installing ESP-IDF tools Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32 Skipping xtensa-esp32-elf@esp-2020r3-8.4.0 (already installed) 〜〜〜中略〜〜〜 Installing Python environment and packages Creating a new Python environment in /Users/オレ/.espressif/python_env/idf4.2_py3.7_env 〜〜〜お、IDF_PYTHON_ENV_PATHに使えそうなのが表示された〜〜〜 Installing virtualenv Collecting virtualenv 〜〜〜中略〜〜〜 Successfully built Flask-Compress Installing collected packages: MarkupSafe, Werkzeug, python-engineio, Jinja2, itsdangerous, click, bidict, python-socketio, pycparser, greenlet, Flask, brotli, six, Pygments, pygdbmi, gevent, Flask-SocketIO, Flask-Compress, cffi, reedsolo, pyserial, pyparsing, pyelftools, gdbgui, future, ecdsa, cryptography, bitstring Successfully installed Flask-0.12.5 Flask-Compress-1.9.0 Flask-SocketIO-2.9.6 Jinja2-2.11.3 MarkupSafe-1.1.1 Pygments-2.8.0 Werkzeug-0.16.1 bidict-0.21.2 bitstring-3.1.7 brotli-1.0.9 cffi-1.14.5 click-7.1.2 cryptography-3.4.6 ecdsa-0.16.1 future-0.18.2 gdbgui-0.13.2.0 gevent-1.5.0 greenlet-1.0.0 itsdangerous-1.1.0 pycparser-2.20 pyelftools-0.27 pygdbmi-0.9.0.2 pyparsing-2.3.1 pyserial-3.5 python-engineio-4.0.0 python-socketio-5.0.4 reedsolo-1.5.4 six-1.15.0 All done! You can now run: . /Users/オレ/esp/esp-idf/export.sh (edukit) オレ@MacBookAir Blinky-Hello-World %なんかうまくいったっぽい
export.shを実行せよとのことなので. /Users/オレ/esp/esp-idf/export.sh Adding ESP-IDF tools to PATH... Using Python interpreter in /Users/オレ/.espressif/python_env/idf4.2_py3.7_env/bin/python Checking if Python packages are up to date... Python requirements from /Users/オレ/esp/esp-idf/requirements.txt are satisfied. Updated PATH variable: 〜〜〜中略〜〜〜 Done! You can now compile ESP-IDF projects. Go to the project directory and run: idf.py build (edukit) オレ@MacBookAir Blinky-Hello-World %今度はさらっとexport.shが完了!
この時点でIDF_PYTHON_ENV_PATHを確認すると(edukit) オレ@MacBookAir Blinky-Hello-World % echo $IDF_PYTHON_ENV_PATH /Users/オレ/.espressif/python_env/idf4.2_py3.7_envおぉ、ちゃんと設定されている!
ということは、Minicondaをインストールしたときに
~~ export.shを実行する前に、適当なIDF_PYTHON_ENV_PATHを設定して ~~
~~ install.shを実行すればよかっただけな予感。。。↑ではなく、初めて(edukit)に環境移動した直後、export.shの前だな、きっと
というわけで再度チャレンジ!
(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py menuconfig Executing action: menuconfigここからはドキュメント通り、
先ほど控えておいたエンドポイントと自宅のWifi設定を入れて保存後に終了
すると同時にRunning cmake in directory /Users/オレ/m5stack/Core2-for-AWS-IoT-EduKit/Blinky-Hello-World/build Executing "cmake -G Ninja -DPYTHON_DEPS_CHECKED=1 -DESP_PLATFORM=1 -DCCACHE_ENABLE=0 /Users/オレ/m5stack/Core2-for-AWS-IoT-EduKit/Blinky-Hello-World"... -- Found Git: /usr/bin/git (found version "2.24.2 (Apple Git-127)") -- IDF_TARGET not set, using default target: esp32 -- The C compiler identification is GNU 8.4.0 -- The CXX compiler identification is GNU 8.4.0 -- The ASM compiler identification is GNU 〜〜〜中略〜〜〜 -- Configuring done -- Generating done -- Build files have been written to: 〜〜〜以下略〜〜〜無事Configできたっぽい
ではBuildを!
(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py build Executing action: all (aliases: build) Running ninja in directory /Users/オレ/m5stack/Core2-for-AWS-IoT-EduKit/Blinky-Hello-World/build Executing "ninja all"... [0/1] Re-running CMake... -- Building ESP-IDF components for target esp32 〜〜〜なんとか走り始めました! ここから結構時間がかかります〜〜〜 [1244/1244] Generating binary image from built executable esptool.py v3.0 Generated /Users/オレ/m5stack/Core2-for-AWS-IoT-EduKit/Blinky-Hello-World/build/AWS_IoT_EduKit-Blinky-Hello-World.bin Project build complete. To flash, run this command: /Users/オレ/.espressif/python_env/idf4.2_py3.7_env/bin/python ../../../esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/AWS_IoT_EduKit-Blinky-Hello-World.bin or run 'idf.py -p (PORT) flash'おぉ、ついにbinができあがりました!
転送する前にドキュメント通りに古いファームを消します(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py erase_flash -p /dev/cu.usbserial-0225F023 Executing action: erase_flash 〜〜〜中略〜〜〜 esptool.py v3.0 Serial port /dev/cu.usbserial-0225F023 Connecting........___ Chip is ESP32-D0WDQ6-V3 (revision 3) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 24:0a:c4:f9:9f:ac Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Erasing flash (this may take a while)... Chip erase completed successfully in 26.2s Hard resetting via RTS pin... Doneきえました!
では、転送します!(edukit) オレ@MacBookAir Blinky-Hello-World % idf.py flash monitor -p /dev/cu.usbserial-0225F023 Executing action: flash 〜〜〜中略(しばし待ちます)〜〜〜 I (7508) esp_netif_handlers: sta ip: xxx.xxx.xxx.xxx, mask: 255.255.255.0, gw: xxx.xxx.xxx.xxx I (7528) Blinky: Connecting to AWS IoT Core... I (7708) aws_iot: Attempting to use device certificate from ATECC608 I (20048) Blinky: Successfully connected to AWS IoT Core! I (20048) Blinky: Subscribing... I (20398) Blinky: Subscribed to topic: 012345678901234567/# I (20398) Blinky: I (20398) Blinky: ************************************** I (20398) Blinky: Client Id - 012345678901234567 I (20408) Blinky: **************************************やっとAWSに接続できました!!!
5. Lチカ
もうあとは簡単です。
ドキュメント通りにAWS IoT Coreコンソールで状態確認!
Publishの入力画面で
<Client ID>/blink
をtopicにpublishすると
M5Stackの横にあるLEDが点滅し、
もう一回同じようにpublishすると点灯状態になります!Macのターミナルではこんな感じでモニターすることができます
(4回publishしています)I (635748) Blinky: Subscribe callback I (635748) Blinky: 012345678901234567/blink { "message": "Hello from AWS IoT console" } I (650488) Blinky: Subscribe callback I (650488) Blinky: 012345678901234567/blink { "message": "Hello from AWS IoT console" } I (731598) Blinky: Subscribe callback I (731598) Blinky: 012345678901234567/blink { "message": "Hello from AWS IoT console" } I (738968) Blinky: Subscribe callback I (738968) Blinky: 012345678901234567/blink { "message": "Hello from AWS IoT console" }6. とりあえず
IoTの勉強というよりも、環境設定のラボのようですが
とりあえずLチカのラボ終了!