趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Windows10からLinuxMint上のHL2240Dに印刷する

    投稿日 2018年 3月 26日 コメントはありません

    自宅の環境の整理をしているのですが、これまで不便だったのがWindows10からプリンタ(ブラザーのHL2240D)に印刷する時でした。正直、なぜLAN内蔵モデルにしなかったんだろう、というのがこれまでの悩みでした。

    が、今回、Windows10からLinuxMintに接続したHL2240DにLAN経由で印刷することができるようになりましたので、メモしておきます。

    1.LinuxMint側で印刷できるようにする

    これは以前の記事のブラザーのレーザープリンタ買いましたを見て下さい。インストールしたら、「システム管理」→「プリンタ」でHL2240Dを「共有する」にチェックを入れておきます。

    2.名前解決できるようにする

    LinuxMintのマシンはDHCPでアドレス設定しているので、名前解決できる必要があります。で、簡単なのはavahi(mDNS)なので、そちらの準備をします。
    Linux側はavahi daemon(Mintは初めから入っているような気がする)を入れておきます。Windows側は、Appleのサイトから「Bonjour Print Services (Windows)」をダウンロードしてインストールして、Windowsファイアウォールで 5353/UDP を許可しておきます。インストールしたら、Windows10のコマンドプロンプト/Linuxのシェルから「ping 相手のホスト名.local」で応答が返ってくるのを確認します。

    3.プリンタの追加

    「Bonjour Print Services (Windows)」をインストールした時に追加された「Bonjour プリンターウィザード」を起動すると、勝手にLinuxMint上のプリンタを見つけてくれました。ウィザードに沿って操作していくのですが、Brotherのドライバが同名でたくさんあってよくわかりません。とりあえず、「Brother Laser Type2 Class Driver」の中の一番下のをインストールして、テスト印刷したらうまくテスト印刷できました。印刷結果ではドライバーの種類が「Type 4 – ユーザーモード」となっていました(よくわかりませんが)。


  • Raspberry Piをネットワークの試験に使う

    投稿日 2018年 2月 10日 コメントはありません

    ここのところ買い集めている小さなLinuxボードは結局はネットワークの試験のために購入したもので、元々はなるべく小さなtcpdumpが使えて動かしっぱなしで放置できるものを探していたものです。で、いろいろぐぐっていたら、linuxでEthernetインタフェースが2つある環境を使って、もっといろいろできることがわかってきました。具体的には、ブリッジとして動作させてた上で、遅延を挿入したりできるというものです。その環境もRaspberry PiにUSBイーサネットアダプタを追加してやれば、Raspberry Piでもできそうなことがわかったので、試してみました。

    1.Raspbianのインストール

    今回はGUIは不要なので、Raspbian Liteを適当なMicro SDに書き込んで、余っていたRaspberry Pi model B+に入れました。
    起動して、User/Passwd=pi/raspberryでログインしたあと、コンソールから

    $ sudo touch /boot/ssh
    $ sudo reboot

    として再起動。再起動後、linuxマシン側から

    $ ssh pi@raspberrypi.local

    としてsshでログイン、以降はリモートログインで作業します。リモートログインしたら、

    pi@raspberrypi:~ $ sudo raspi-config

    として、初期設定をします。今回は、

    • パスワード設定
    • ホスト名をraspinetに変更
    • ブートオプションをConsoleに設定
    • ローカライゼーションでLocaleにja_JP.UTF-8 UTF-8を追加、デフォルトはen_GB.UTF-8のまま。タイムゾーンはAsia/Tokyoを選択。
    • Advanced OptionでExpand Filesystemを選択、Memory Spiltは16MBに設定

    で、設定後に再度、再起動。再起動後、Linuxマシン側から

    $ ssh pi@raspinet.local

    として再度ログインします。ログインしたら、

    pi@raspinet:~ $ sudo apt-get update
    pi@raspinet:~ $ sudo apt-get upgrade
    pi@raspinet:~ $ sudo apt-get install tcpdump bridge-utils

    として、アップデートを一通りかけた後、bridge-utilsとtcpdumpをインストールします。

    2.スクリプトファイルを作成して起動時に実行させる

    pi@raspinet:~ $ sudo vi /usr/local/bin/start-bridge

    として、ブリッジを起動する以下の内容のスクリプトを作成しました。(実行タイミングをsleepで調整しているのでちょっと汚いですが・・・)

    #!/bin/sh
    # disable IPv6
    sysctl -w net.ipv6.conf.all.disable_ipv6=1
    # setup bridge
    brctl addbr vbr0
    brctl addif vbr0 eth0
    brctl addif vbr0 eth1
    sleep 5
    # start interface
    ifconfig eth0 0.0.0.0 up
    ifconfig eth1 0.0.0.0 up
    ifconfig vbr0 0.0.0.0 up
    sleep 5
    dhclient -r
    dhclient vbr0
    echo 0 > /sys/devices/virtual/net/vbr0/bridge/multicast_snooping

    IPv6は今回禁止、IGMP snooping も禁止しました。作成後に、

    pi@raspinet:~ $ sudo chmod a+x /usr/local/bin/start-bridge

    として、実行権限を付与。起動時に実行させるため、/etc/rc.local を修正して、最後の exit 0 の前に以下の部分を追加しました。

    if [ -e /usr/local/bin/start-bridge ]; then
      /usr/local/bin/start-bridge &
    fi

    これで、Raspberry Piを起動させると自動的にブリッジとして動作するようになります。

    3.tcpdumpで通過パケットをモニタしてみる

    Linuxホスト側から

    $ ssh pi@raspinet.local

    でブリッジに設定したRaspberry Piにログインします。その後、

    pi@raspinet:~ $ sudo tcpdump -i vbr0 not port ssh

    とか、

    pi@raspinet:~ $ sudo tcpdump -i vbr0 not host `/sbin/ip -f inet -o addr show vbr0 | awk '( $2 == "vbr0" ) {print $4}' | cut -d/ -f 1`

    で通過するパケットをモニタします。(後ろの方の長いのは vbr0 のIPアドレスを抽出しているだけです)
    ポートやIPアドレスでRaspberry Piに接続しているsshのパケットを除外しています。除外しないと、表示した文字列をパケットキャプチャして、それを再度表示してしまいます。

    4.参考情報


  • NanoPi NEO2のUbuntu CoreでWiFi有効化

    投稿日 2017年 11月 29日 コメントはありません

    NanoPi NEO2 の Ubuntu Core で WiFi を有効化したので、その際のメモです。

    使用可能なUSBアダプタは

    • RTL8188CUS 802.11n WLAN Adapter
    • RT2070 Wireless Adapter
    • RT2870/RT3070 Wireless Adapter
    • RTL8192CU Wireless Adapter
    • NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]

    ということらしいですが、きっと Raspberry Pi で動作可能なものは動くのでしょう^^;

    USBコネクタにWiFiアダプタは挿しておきます。

     

    1.使用可能なデバイスのリストアップ

    $ sudo nmcli dev
    DEVICE           TYPE      STATE          CONNECTION 
    eth0             ethernet  connected      Wired connection 1 
    wlx106f3fxxxxxx  wifi      disconnected   -- 
    lo               loopback  unmanaged      --

    という感じで、wlxに続いてMACアドレスという形でデバイスが表示されました。

    2.WiFi起動

    $ sudo nmcli r wifi on

    3.アクセスポイントのスキャン

    $ sudo nmcli dev wifi
    *   SSID             MODE   CHAN  RATE       SIGNAL  BARS    SECURITY 
        xxxxxxxxxxxxxxx  Infra  2     54 Mbit/s  100     ▂▄▆█  WPA1 WPA2 
        Mxxxxxxxx        Infra  11    54 Mbit/s  100     ▂▄▆█  WPA1 WPA2 
        axxxxxxxxxxx     Infra  11    54 Mbit/s  100     ▂▄▆█  WPA1 WPA2 
        Gxxxxxxxx        Infra  5     54 Mbit/s  82      ▂▄▆█  WPA1 WPA2 
        Nxxxxxxxx        Infra  5     54 Mbit/s  82      ▂▄▆█  WPA1 WPA2 
        sxxxxxxxxxxx     Infra  8     54 Mbit/s  52      ▂▄__   WPA1 WPA2 
        Bxxxxxxxxxxxxx   Infra  1     54 Mbit/s  42      ▂▄__   WPA2 
        axxxxxxxxxxxxxx  Infra  8     54 Mbit/s  22      ▂___    WEP 
        axxxxxxxxxxxxx   Infra  11    54 Mbit/s  22      ▂___    WPA1 WPA2

    という感じでグラフィカルに表示されます。

    4.アクセスポイントに接続

    $ sudo nmcli dev wifi connect " (SSID) " password "パスワード" 
    Device 'wlx106f3fxxxxxx' successfully activated with 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.

    5.接続されているか確認

    $ ifconfig
    wlx106f3fxxxxxx Link encap:Ethernet HWaddr 10:6f:3f:xx:xx:xx 
     inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.255 Mask:255.255.252.0
     inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
     RX packets:595 errors:0 dropped:0 overruns:0 frame:0
     TX packets:372 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:86952 (86.9 KB) TX bytes:82940 (82.9 KB)

    という感じで無事に接続。再起動しても大丈夫です。


  • NanoPi NEO2のNASキットを動かしてみました

    投稿日 2017年 11月 28日 5個のコメント

    秋月で NanoPi NEO/NEO2 用のNASキットが売っていたので、買ってみました。

    秋月の説明書きにはヒートシンクが同梱されているとは書いてない(写真には写っていますが・・・)ので、思わずヒートシンクも余計に買ってしまいましたが、これから買う方はキットにヒートシンクが同梱されているので気をつけて下さい。

    このNASキット以外に、

    • NanoPi-NEO2 (または NanoPi-NEO)
    • 2.5インチのHDDまたはSDD(まずは余り物の160GBをつけてみました)
    • CR2032コイン型リチウム電池
    • 起動用のMicroSDカード(手持ちの16GBを使いました)
    • 12VのACアダプタ(秋月で標準的なDCプラグがついているもの)

    の準備が必要です。

    組み立てにあたっては、

    • ハンダゴテ一式(NanoPi-NEO2の端子はハンダ付けが必要)
    • プラスドライバ(たぶん+1のもの)

    も必要です。

    とりあえず、端子をハンダ付けしました。ランド径が小さいので、ハンダ付けしにくいです。

    この状態で、別のNanoPi-NEO2 から持ってきた MicroSD カードを挿して Ubuntu-Core で起動して ssh でログイン、適当に /dev/sda1 を mount してやると、中身を見ることができましたので、動作は問題ないようです。

    ヒートシンクを付けてみました。

    この後、Official ROMのイメージを

    https://www.mediafire.com/folder/ah4i6w029912b/NanoPi-NEO2

    の下の Official ROMs から nanopi-neo2_debian-nas-jessie_4.11.2_20171103.img.zip をダウンロードして、これを展開、USBイメージライタでMicroSDに書き込んで電源投入します。

    ブラウザで、 http://friendlyelec.local/ にアクセスすると、

    として画面が出ました。

    ユーザー名: admin
    パスワード: openmediavault

    でログインすることができました。

    とりあえず、

    • Web管理者パスワードの設定
    • タイムゾーンの設定、NTPの有効化
    • ホスト名を NanoPi-NAS に変更
    • アップデートの確認&インストール
    • ディスクのワイプ、ファイルシステム作成
    • ユーザーの作成

    をしてみました。

    この後、プラグインを見てみると、「openmediavault-flashmemory」というのがあり、これを使うと MicroSD への書き込みを減らせるようです。・・・が、インストールを試みたところエラーになりました・・・。

    あと、デフォルトで root での ssh ログインが有効になっています

    $ ssh root@nanopi-nas.local (変更していない場合はfriendlyelec.local)
    root@nanopi-nas.local’s password: (デフォルトパスワードは fa )
    root@nanopi-nas:~# passwd
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    root@nanopi-nas:~# passwd pi
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    root@nanopi-nas:~# passwd fa
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    root@nanopi-nas:~#

    として、ログインパスワードは変更しておく必要があります。(もしくは、SSHを無効化したほうがよいかも)

    ・・・と思ったのですが、/etc/ssh/sshd_config の AllowGroups の項目には root と ssh しかいないので、実際にログインできるのは root だけのようです。


  • ESP32でNTP Clientを動かしてみた

    投稿日 2017年 2月 8日 コメントはありません

    一昨日のESP-WROOM-32(ESP32)をArduino IDEで動かしてみた続きです。

    Arduino IDEにはWiFi関連のサンプルプログラムがあるので、動かしてみました。

    「ファイル」⇒「スケッチ例」⇒「あらゆるボードのスケッチ例」⇒「WiFi」の下にいくつかサンプルが有りますが、こちらはESP32環境ではビルドできませんでした。Espressif社提供のライブラリとArduino IDEに初めから付いているWiFiライブラリでは完全に互換ではないようです。(確か、バージョン情報を取得するようなライブラリでコケてたような気がします)

    「ファイル」⇒「スケッチ例」⇒「ESP32 Dev Module用のスケッチ例」⇒「WiFi」の下の「WiFiIPv6」というのを開いてみると、NTPクライアントプログラムのように見えますので、これを動かしてみることにします。
    スケッチ例を開いて、冒頭にある

    #define STA_SSID "xxxxxxxxxxxxxxxxx"
    #define STA_PASS "xxxxxxxxx"

    の部分にSSIDとパスワードをセットして名前を付けて保存、シリアルポートを /dev/ttyUSB* に設定した後、シリアルモニタを起動して、次に基板上のタクトスイッチを押しながら、「マイコンボードに書き込む」としてやると、ビルドと書き込みが行われます。タクトスイッチは「Writing at 0x00010000… (5 %) 」という表示が出たところで離してもOK。

    書き込みが終わると、ESP-WROOM-32モジュールは勝手にリブートして起動します。

     

    シリアルモニタ側には IPv6 でのステーションとしての動作、アクセスポイントとしての動作状況の表示、IPv4のステーションとしての動作状況が表示され、IPv4のIPアドレス取得ができると、その後NTPクライアントが動作している状況が表示されました。

    また、同時にアクセスポイントとしても動作しているので、スマートフォンのWiFiアナライザなどのツールでみると「esp32-v6」というSSIDでのアクセスポイント動作が確認できました。


  • ESP32を動かしてみた

    投稿日 2017年 2月 6日 1つのコメント

    ふと秋月のWebサイトをみていたら、ESP-WROOM-32が発売になっていました。早速、秋月へ行ってゲットしてきました。

    で、とにかく動かしてみます。すでに先達もいるようなので、参考にさせてもらいながら、なるべく手抜きして動かします。開発環境はESP-WROOM-02の時と同様にArduinoで動かします。

    使用した部品

    使用した部品は以下の通りです。

    • ESP-WROOM-32
      まずこれがないと、ですね。
    • FT-232RQ USBシリアル変換キット
      最近のお気に入りのUSBシリアル変換基板です。Linuxでも安定して動作するのでGoodです。
    • NJU7223DL1
      3.3Vのレギュレータです。データシートの回路図だと入出力のコンデンサが小さくて済みそうなので、選びました。
    • 0.1uF 1608 チップコンデンサ✕3
      三端子レギュレータの入出力に各1個、USBシリアルのRTS端子とEN端子の間に1個
    • 22uF 1608 チップコンデンサ✕1
      ESP-WROOM-32の資料では電源入力に10uFが付いているので、手持ちの22uFのチップコンを使用
    • 10kΩ 1608 チップ抵抗✕2
      1個はEN端子のプルアップ、もう1個はIO0端子のプルアップ
    • 0.022uF 1608 チップコンデンサ✕1
      EN端子の入力とGND間に接続
    • 適当なタクトSW✕1
      IO0端子をGNDに落としてダウンロードモードに移行させるのに使います
    • ユニバーサルプリント基板
      これを使いました。最近は軽量化を目指して薄めの基板を使ってます。この基板は両面なのですが、内面がスルーホール処理されていないので表裏の接続ができていない箇所があってハマリました。
    • その他
      適当なピンヘッダ・ピンソケット、ポリウレタン被覆線、スズメッキ線

    ハードウェアの組み立て

    こちらの回路を参考に手抜きして作りました。

    • GND端子はUSBシリアル基板のGNDに接続
    • 3V3端子は三端子レギュレータの出力端子に接続
    • EN端子は10kΩでプルアップ、GNDとの間に0.022uF、USBシリアル基板のRTS端子との間に0.1uFを接続。この0.1uFによりPC側でRTSを制御するとESP-WROOM-32側にリセットがかかります。
    • IO0端子はプルアップ、および、タクトスイッチを接続して、ボタン押下でGNDに落ちるようにします。ボタンを押しながらArduino IDEで書き込み操作をすることで、書き込みモードへ移行できます。
      (注:IO0のプルアップは不要らしい。タクトスイッチによるIO0のコントロールがうまく行かなかった際につけたが、外してOKかは試していない。ちなみに、タクトスイッチでIO0がコントロールできなかった原因はノンスルーホール基板を使ったので基板の表裏で接続ができてなかったため。)
    • TXD0端子はUSBシリアル基板のRXDへ接続
    • RXD0端子はUSBシリアル基板のTXDへ接続

    回路図はこんな感じです。15ピンのGNDは手抜きで接続していませんが、動いています。

     

    こんな感じになりました。

    ESP-WROOM-32は裏返しに両面テープで基板に貼り付けてあります。基板を作りなおす時も多分無事に剥がせると思います。

    無計画に作ったので、裏側は汚いですw。左上のレギュレータ周りがどうしようもないですね。

    まずはハードウェアの動作確認

    Arduinoで書き込みをする前に、ハードウェアの動作確認をしておきます。
    といっても、よくよく結線を確認した後、電源を投入(USBケーブルで接続)するだけです。
    電源を投入したら、スマートフォンのWiFiアナライザなどアプリケーションで、「ESP-xxxxxx」というSSIDが見えることを確認しておきます。SSIDが見えればとりあえずESP-WROOM-32はアクセスポイントとして動作しているはずです。(注:Arduino環境の構築ができていれば、Arduinoのシリアルモニタで /dev/ttyUSB* を115200bpsでモニタすればブートローダなどの表示も確認できます)

    Arduino開発環境の構築

    PCはLinux Mint 18の64bit版です。

    まず、arduino IDE をインストールします。その前に、古いバージョンをアンインストール。

    $ cd arduino-1.6.12
    $ ./uninstall.sh 
    Removing desktop shortcut and menu item for Arduino IDE... done!

    arduino.cc から最新版の arduino-IDE をダウンロード。今回ダウンロードしたファイルは arduino-1.8.1-linux64.tar.xz です。

    $ cd ~
    $  xzcat ダウンロード/arduino-1.8.1-linux64.tar.xz | tar xvf -
    $ cd arduino-1.8.1/
    $ ./install.sh
    Adding desktop shortcut, menu item and file associations for Arduino IDE... done!

    次に、arduino-esp32 をインストール。このページのコマンドをコピペ。

    $ sudo usermod -a -G dialout $USER && \
    > sudo apt-get install git && \
    > mkdir -p ~/Arduino/hardware/espressif && \
    > cd ~/Arduino/hardware/espressif && \
    > git clone https://github.com/espressif/arduino-esp32.git esp32 && \
    > cd esp32/tools/ && \
    > python get.py
    [sudo] xxx のパスワード: 
    パッケージリストを読み込んでいます... 完了
    依存関係ツリーを作成しています 
    状態情報を読み取っています... 完了
    git はすでに最新バージョン (1:2.7.4-0ubuntu1) です。
    アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 39 個。
    Cloning into 'esp32'...
    remote: Counting objects: 2799, done.
    remote: Compressing objects: 100% (10/10), done.
    remote: Total 2799 (delta 1), reused 0 (delta 0), pack-reused 2785
    Receiving objects: 100% (2799/2799), 54.67 MiB | 3.44 MiB/s, done.
    Resolving deltas: 100% (1152/1152), done.
    Checking connectivity... done.
    Checking out files: 100% (903/903), done.
    System: Linux, Info: Linux-4.4.0-45-generic-x86_64-with-LinuxMint-18-sarah
    Platform: x86_64-pc-linux-gnu
    Downloading xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
    Done
    Extracting xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
    Downloading esptool-fe69994-linux64.tar.gz
    Done
    Extracting esptool-fe69994-linux64.tar.gz
    Done
    ~/Arduino/hardware/espressif/esp32/tools $

    いよいよ起動します。デスクトップ上のArduino IDEのアイコンをダブルクリックして、Arduino IDEを起動。
    起動したら、「ツール」→「ボード:xxx」→「ESP32 Dev Module」を選択でESP32モジュールを選択します。

    サンプルを動かしてみる

    次にサンプルを動かしてみます。シリアルに結果が表示されるものが良いと思うので、WiFiScanを動かしてみます。
    「ファイル」→「スケッチ例」→ESP32 Dev Module用のスケッチ例の下の「WiFi」→「WiFiScan」選択すると、サンプルプログラムが表示されます。「ツール」⇒「シリアルポート」⇒「/dev/ttyUSB0(環境によって変わります)」でシリアルポートを選択した後、「ツール」⇒「シリアルモニタ」でシリアルモニタを起動しておきます。

    準備ができたら「⇒」ボタンをクリックして、書き込んでみます。「⇒」をクリックする際にはIO0に接続したタクトスイッチを押しながらクリックすることでダウンローダを起動します。「Wrting … 」という表示が出たら、タクトスイッチのボタンを離します。

    書き込み完了後はこんな感じ。

    書き込みが終わると、シリアルモニタの方に表示が始まります。

     

    こんな感じでSSIDのリストが表示されれば成功です。


  • ESP8266でSmartConfigを試してみた

    投稿日 2016年 11月 5日 3個のコメント

    長らく放置していたESP8266基板ですが、やっと動かしました。前回の記事から数えて約1年(ぉぃ)。回路図の定数に不適切な部分があってブートローダから先に進んでなかったのと、秋月のFT234X搭載の超小型UART変換基板だとなぜかLinux側が固まってしまうという事象に悩まされたためです(汗)。

    で、まだ最低限の機能しか試してないのですが、回路図はこんな感じです。回路図の電源周りにいろいろわけのわからないFETが入っていますが、これはソフトウェア制御で電源OFFできるようにするのと、電池使用時に電源電圧を自身で測定できるようにするためです。電池を使えば Amazon Dash Button 相当のことができる予定です。

    回路図

    UART変換基板は結局秋月のAE-TTL-232Rを使いました。

    開発環境はArduino IDE 1.6.12を使っています。昔調べた方法でボードマネージャでESP-8266を使えるようにして、ボードはGeneric ESP8266 Module、FlashメモリサイズはESP-WROOM-02に合わせて1M(64K SPIFFS)を選択しました。

    2016-11-05-02-29-33

    さらに1年間の進化は素晴らしいもので、smartconfigというWiFi周りの設定をAndroidスマートフォンでやる仕組みが登場していました。ArduinoのコードはGitHubのここから持ってきました。少しこの基板にあわせて修正したのが以下のファイルです。

    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    
    void setup() {
      int cnt = 0;  
    
      // set for STA mode
      WiFi.mode(WIFI_STA);
      
      // put your setup code here, to run once:
      Serial.begin(9600);
      
      // led status at pin16
      pinMode(12,OUTPUT);
      digitalWrite(12, HIGH);   // turn the LED on (HIGH is the voltage level)
      
      //configure pin0 
      pinMode(0, INPUT_PULLUP);
    
      // deplay for 2 sec for smartConfig
      Serial.println("2 sec before clear SmartConfig");
      delay(2000);
      
      // read pullup
      int isSmartConfig = digitalRead(0);
      if (isSmartConfig==0) {
        // bink for clear config
        blinkClearConfig();
        Serial.println("clear config");
        // reset default config
        WiFi.disconnect();
    
      }
    
      // if wifi cannot connect start smartconfig
      while(WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
        if(cnt++ >= 15){
           WiFi.beginSmartConfig();
           while(1){
               delay(500);
               if(WiFi.smartConfigDone()){
                 Serial.println("SmartConfig Success");
                 blinkSmartConfig();
                 break;
               }
           }
        }
      }
    
      Serial.println("");
      Serial.println("");
      
      WiFi.printDiag(Serial);
    
      // Print the IP address
      Serial.println(WiFi.localIP());
    
    }
    
    
    void blinkSmartConfig() {
        digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
        delay(50);              // wait for a second 
        digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
        delay(50);
    }
    
    void blinkClearConfig() {
      int i=0;
      while(i<=3) {
        digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
        delay(100);              // wait for a second 
        digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
        delay(100);
        i++;
      }
    }
    
    void blinkStartConfig() {
      pinMode(13,OUTPUT);
      int i=0;
        digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    
    
    void loop() {
      int isSW1 = digitalRead(0);
      if(isSW1==0){
        for(int i=5;i>0;i--){
          delay(1000);
          Serial.println(i);    
        }
        Serial.println("Power off");    
        delay(500);
        pinMode(15,OUTPUT);
        digitalWrite(15, HIGH);   // Power-off the board (HIGH is the voltage level)
        delay(5000);
      }
      delay(100);
      digitalWrite(12, 1-digitalRead(12));   // Blink the LED
    }
    
    

    修正したのは起動時のGPIO12のLEDの点灯と、ステータスのGPIOをGPIO16からGPIO13に変更、初期化が完了したら電源OFFする制御を追加したことです。これをコンパイルしてボードに書き込んでやります。

    シリアルモニタで動作を確認しながら、スマートフォンで「ESP8266 SmartConfig」というアプリを動作させてESP8266モジュールに接続させる先のSSID(スマートフォンがつながってるSSIDが勝手に表示されます)と、パスワードを入力してCONFIRMを押してしばらく待つとESP8266側の接続設定がされるという便利なものです。

    設定したSSIDとパスワードはフラッシュメモリ内に保存されて、次回は勝手にロードしてくれます。(上記のソースでは、起動後2秒たった瞬間にGPIO0がLレベルだと設定をクリアして再度設定待ちになります)

    <���������$�������ɕ����Ɂ�����
    �����5R�................SmartConfig Success
    .SmartConfig Success
    .SmartConfig Success
    
    
    Mode: STA
    PHY mode: N
    Channel: 4
    AP id: 0
    Status: 5
    Auto connect: 1
    SSID (17): xxxxxxx-yyyyyy-z
    Passphrase (10): xxxxxxxxxx
    BSSID set: 1
    ??.??.???.??
    5
    4
    3
    2
    1
    Power off

    上記は電源投入〜SmartConfigによる設定〜APへの接続〜シャットダウンまでのシリアルコンソールのログです。楽でいいですね!


  • miredoでIPv6を使ってみる

    投稿日 2016年 7月 24日 コメントはありません

    NATではないIPアドレスが欲しいのだけど、V4は無理・・・なので、トンネル越しのIPv6を試してみた。

    といっても、LinuxMint18では非常に簡単で、SynapticでToredoのLinux実装らしいmiredoをインストールすると、ifconfigでteredoというデバイスが増えてIPv6が使えるようだ。

    ・・・が、再起動するといなくなっている。

    $ sudo service miredo start

    とすると復活するのだが。

    調べてみると、起動中に “teredo-debian.remlab.net” というホスト名を解決できないために起きる既知の問題の模様。


  • ESP8285が登場!?

    投稿日 2016年 6月 22日 コメントはありません

    例によってHack a Dayの記事から。

    EspressifからESP8266の後継チップが登場しているようです。その名もESP8285。データシートによると、一言で言えば、ESP8266では外付けだったSPI Flash(8Mbit)が内蔵になっていて、より小さなモジュールが作れる、というところでしょう。

    公式かどうかわかりませんが、開発用のボードもすでにあるようです。

    Hack a Dayの記事には小さな小さなモジュールの写真が載っています。小さいことだけはわかるのですが、1元硬貨との比較ではサイズがよくわかりません。やっぱり比較は25セント硬貨とじゃないと・・・。
    で、1元硬貨のサイズは直径25mmで、500円硬貨は直径26.5mmなので、ほぼ500円硬貨くらいのようです。となると、モジュールのサイズは9mm角くらいでしょうか。アンテナがないので、アンテナ付きだともう少し大きくなるでしょうが。


  • ESP32のβ版がもうすぐリリース!?

    投稿日 2015年 11月 7日 2個のコメント

    Twitterの情報(Espressifの中の人)によると、EspressifからもうすぐESP8266の次の製品が出るようです。

    ざっと書いてあることは、こんな感じ。(意訳です。英語力ないので違ってても責任持てませんw)

    我々は過去1年間ESP32と呼んでいる新しい製品の開発に全力を傾けてきた。皆さんのコメントを聞いて、細心の注意を払いながらそれらをリストアップし、最新のチップでは大部分を満足できるようベストを尽くした。皆さんの役に立てるよう、こんな機能をこのチップに搭載した。

    1. より速くなったWiFi。ビデオストリーミングができる144.4MBbps。また、新しいRFアーキテクチャを採用し、アプリケーションの回路がよりシンプルになるようにした。
    2. Bluetooth LE対応。レガシーも(もちろん)サポート。
    3. 160MHzで動作するデュアルコアのパワフルなTensilica L108プロセッサ。
    4. 低消費電力。Deep Sleep中でもADC変換などが可能。
    5. 周辺機能盛りだくさん。DMA付きのインタフェースで、タッチセンサ、ADC、DAC、I2C、UART、SPI、SDIO、I2S、RMII、PWM。申し訳ないがUSBはない。
    6. RAMたくさん。現時点で〜400kB。
    7. セキュリティ。AESとSSLのハードウェアアクセラレータ内蔵。
    8. 簡単になったAPI。

    我々は開発者のサポートに全力を尽くすことを約束する。その1つとして我々が求めているのは、どのようにしたらツールチェーンを改善できるか、ということだ。我々はどんな意見でも歓迎する。
    βテストはまもなく開始する。開発者向けのアプリケーションボードはこの先2週間以内に発送する予定だ。(ただ)限られた数しかチップがないので我慢して欲しい。合計200枚しか送れない。
    最後に1つ、我々は情熱と才能のある開発者を探している。Espressifには興奮するような開発がたくさんある(ハードもソフトも)・・・製品に搭載するしないに関わらず。我々は常に応用分野を広げようとしており、我々に加わってくれる才能(ある人)をもっと必要としている。もし興味があるなら連絡して欲しい。我々は世界中から才能ある人が上海の私達に加わってくれることや、世界のどこからでも貢献してくれることを歓迎する。
    我々の製品を気に入ってくれることを期待している。応援してくれる全ての人たちに感謝します。

    ・・・だそうです。

    いや、すごいですね。盛りだくさんです。RMIIがあるので、PHYをつければEthernetも付くということですね。(無線LANコンバータやアクセスポイントを構成できるってことですね)
    自分が気になるのは、

    1. 技適の取れたモジュールがいつ出てくるか?
    2. Arduino IDE対応はどうなるのだろうか?
      (やっぱりArduino IDEはお手軽ですからね〜)
    3. UbuntuやDebianでのクロスコンパイル環境構築が容易になるといいな。できれば Debパッケージで提供されたりapt-get/aptitude/synapticでインストールできたりすると嬉しいんだけどなぁ。
    4. ツールチェーンも重要ですが、サンプルプログラムもたくさん用意されるといいな。
    5. 電池でどこまで動くかなぁ?
    6. 高速なデータI/Fは何を使うんだろう?SDIOなのかなぁ?
    7. いくら位なんだろうか?

    というところでしょうかねぇ。用途はたくさんありそうです。まさしく、「WiFi Everywhere!」「IP Everywhere!」という感じになりそうです。