アナリティクス

2018年1月14日日曜日

PCBWayで基板注文(4)

PCM5102aをI2Sで動かすには…というのを試すためだけに作った基板をラズパイで動かしてみる。めんどくさいのでvolumioを使った。

とりあえずイヤホンに出力


3.3Vはラズパイからの出力を使って

  • Bit Clock : GPIO18
  • Data input : GPIO21
  • LR Clock : GPIO19

で繋ぐ。

raspberry piが起動してvolumioが使えるようになった瞬間、耳が爆音に攻撃された。その後は普通に使えて airplay 経由で音は鳴る。爆音はなんでなんだぜ?



とりあえずのスピーカーに出力


バッフルボードつけて試してみたくなるぐらいには鳴ってくれる

爆音でスピーカー壊れなきゃ良いけど



手持ちのDAC+AMPと聞き比べ


この子からスピーカーを拝借し


別のD級アンプ通して聞いてみるテスト



きっと愛着とか、35w×2がオーバースペックとか、店舗でこれがさらに半額だったものを使っているからとか、そんな理由だとは思うが、こっちのが好き。起動の爆音が無ければ。



爆音の原因


…初歩的過ぎる…


爆音さえ無くなれば、そこまで悪いもんじゃ無かったし、Zero W 用にDAC+AMPを作ってみるかな?

PCBWayで基板注文(3)

ヨコハーマ!
広いもんな。


ふざけるなDHL、見積もりを提示しとけばギリギリまで使って良いと思いやがって。まぁ、そこまで来ていれば安心出来るけど、そこにあるなら取りに行くというぐらいテンション上がっている人には逆効果。どう考えても焦らしプレイ

箱入り基板


小さな基板5枚だけの注文ですいません。10cm四方の2mm厚が30枚ぐらい入りそうな箱に梱包されて届いた。次はもう少し大量に頼もう...



ブレードランナー(の逆)的な中国人


5つくれ、6つあげますよ。
2つくれ、1つで十分の逆。
もし不良があっても5枚あるだろ的な意味だろうか?それとも直線で切ったら偶数作れちゃうから持って行きやがれって事だろうか?いずれにしても合理的。



シルク


こんもりしているけど、何も知らないパートのおばちゃんが組むワケじゃないし、ぶっちゃけどうでも良い。1mm程度の高さのフォントでも読めるなら十分。



完成


手ハンダで困らないように3216サイズでフットプリントを作ったけど、手に入るのは大体2012。案外困らずに半田付け出来た。フットプリントも2012しておけば良かった。



2018年1月8日月曜日

PCBWayで基板注文 (2)

PCBWayというよりDHLのお話


深圳でてから香港出るまでが約5時間。
成田出てから東京出るまでが3時間半。

東京出てから横浜到着までが17時間
どうすりゃそんなにかかるんだw

途中までは流石のDHLと思ってたけど、日本に入って大減速...

2018年1月4日木曜日

PCBWayで基板注文

基板を作るのにアセトン+光沢紙プリントを使っていたけど、いい加減面倒になってきた。0.65mmピッチの足とか両面基板とかビア打ちとかの時間を考えたら注文した方が楽だろ。と、自作基板で遊ぶのに飽きてきた言い訳を作り、発注してみることにした。Fusion PCB とか Elecrow とか PCBWay とか、どれも一長一短みたいなので、どれ選んでも一緒だろと言う事で、PCBWayでやってみた。


ガーバーファイルの出力


  • デザインルール/CAMプロセッサ
    ここから持ってきて、アプリケーションのEagleの下に突っ込む
  • Eagleからのガーバーファイル出力のやりかた
    ここを参考
  • PCBWayが必要とするファイルの説明
    ここに手順と必要なファイルの説明が書いてある
  • Zipにまとめる
    上のリンク先に書いてあるけど、拡張子(cmp,drd,dri,gpi,plc,pls,sol,stc,sts)の9つのファイルを1つのzipファイルに格納すればOK

注文


  1. Instant Quote
    HomeのところでPCB Prototypeを選択して、大きさ、厚さ、基板の種類、枚数を入力して、Quote Now。おおざっぱな注文内容からスタート。
  2. サイズと枚数確認して...
  3. ソルダーレジストの色を選ぶぐらいしか悩むところが無い...
  4. 指定が終わったらCalculate
  5. 配送方法を選ぶ
    DHL高いけど、安いの選ぶと15日以上、一番安いのだと多分注文した事すら忘れるぐらいかかる。...のでDHL。さらに急ぐオプションもあるのが驚き。で、Add to Cart
  6. ガーバーファイル(zip)をアップロードする

ガーバーファイルのアップロードが終わると支払い。PayPalで払うと8ドル追加が必要。Wenstern Union なら追加費用無いのか…セブン銀行?
年が明けたばかりで、ちゃんとサクサク進むのかな?


なにはともあれ、サービスを受けたかった。サポートされたかった。

その指の意味を聞きたかった。


ええい、もっとキリキリ作れ!

なんか、工程がわかって楽しい。


2018/1/6 作業が完了してデリバリー始まってた。出荷の通知もメールで来たし(迷惑メール扱いされてたので除外リストに登録w)、ポータルのダッシュボードで状況確認出来るし、ここまで文句なし。

実装まで頼むとTestingのところにチェックが入るのかな?

2018年1月1日月曜日

VSCodeでESP32を操る

Atomが素晴らしいエディタと言ったか?アレはやっぱり嘘だ。要はPlatformIOが使いたいだけで、それがVSCodeにあるってわかったからそっちに戻るというだけ。これを見てESP-IDF+VSCodeで行けるか?と希望を持ったけど、ソースコードから波線が消えなくて絶望してたら、いつの間にかVSCodeにPlatformIOが来てて、シリアルポートも使えたのでこっちに移行。VSCodeさえあればいい。

PlatformIOのインストール


拡張機能の検索で"Platform"とでも入れる


Jan Hanさん知らないから上のほうで。



プロジェクトの開始


HomeタブでNew Project


ボードは適当に好きなので


FrameworkはとりあえずESP-IDF


プロジェクトの保存先を決めて



作ったプロジェクトの場所をVSCodeが勝手に開きなおしてくれる



ESP-IDFのHello world


hello_world_main.cファイルをsrcディレクトリに追加してここからHello worldのソースをコピペ



あとはビルドしてアップロード



でシリアルモニタで見てみると


見事に文字化け。9600bpsで繋がってるっぽいので platformio.ini にボーレートの設定を追加。


ほぼほぼ治った...なんか残るけど。




なんでCOM3でうまく繋がってるんだろ?



undefined reference to `esp_a2d_register_callback'
...まじかよ...ESP-IDFに戻るか...

2017年12月31日日曜日

名前の由来

Why name Frog?を見ると、どうやらただのカエル好きらしいが、自分はモジュールを外すと、モジュールが吹っ飛んでくからその名前にしたと思っている。モジュールは吹っ飛んでくけど、差し替え可能なのはありがたい。


ESP-IDFの設定


デバイスマネージャで見るとCOM3が割り当てられていたので、make menuconfigで、Serial flasher config→Default serial port→で"COM3"を設定

あとはmake flashして書き込む…のだが、MINGW32のプロンプトに"Connecting..."と出てきたらPROGボタンを一度押す。これをしないでTimeoutになること2回...本当はArduinoやPlatformIOでやりたい。

衝動買いしたFrogoPins


確かtwitterで見かけて、即買って半年以上放置してたんだよな…それでもPlatformIOのボードリストに出てこないし、なんで使われなかったんだろ?差し替えのニーズって無いのかな?それとも出どころの所為だろか?


そもどうやって差し替え実現してるのか知りたくて買ったんだよな。届いたときは結構笑った。

1つ注文してその一つがぶっ壊れてるとめんどくさいから値段によっては2つ頼むのだけど、1つはプッシュボタンスイッチの先端が折れてなくなっていた。その辺はやっぱり中華クオリティ。だけど使う分には困らないのでただの予備になった。ピンヘッダの折り方雑だもんな...というか製品に折って使うなw

ともあれ、いろいろ愉快な製品。


1/1 1:11 素晴らしい

2017年10月15日日曜日

pHAT DACを使ってAirPlayとBluetooth(A2DP)

Super Simple Raspberry Pi Audio Receiver Installでサウンドカードも入れるとpHAT DACは出てこなかったので、回避する手順。当たり前な手順のメモ。

pHAT DACのセットアップ


ここのAutomated Set Up

    curl https://get.pimoroni.com/phatdac | bash

Super Simple Raspberry Pi Audio Receiver


ここのInstall

    git clone https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install.git
cd Super-Simple-Raspberry-Pi-Audio-Receiver-Install
sudo ./install.sh

あとはお好きに

先にpHAT DACを設定しておけば、No sound cardを選択すればそのまま使われる。
そりゃそうだ。

2017年6月26日月曜日

Tornadoを使ったWebAPIサーバ(の素)

BLEやPiCameraを外からコントロールしたいと思ったけど、PHPとかのページから叩くのはなんか違うと思ったので、TornadoでWebSocketのサーバを作ってみた。内容はここここの組み合わせ。

Tornadoのインストール


    
pip install tornado

サーバープログラム


ここのサーバーサイドのコードほぼまんま。ここにある方法でデーモン化。デーモンになると何やってるかわからんので、/var/log/websocket_server.logになんか吐き出すようにしている。on_messageがサンプルのままでAPIサーバーでもなく、ただのエコーサーバーだけど、中身は後でネタに応じて実装するということで。


websocket_server.service

    
[Unit]
Description=Websocket server daemon

[Service]
ExecStart=/usr/local/sbin/websocket_serverd.py
Restart=always
Type=forking
PIDFile=/var/run/websocket_serverd.pid

[Install]
WantedBy=multi-user.target

websocket_serverd.py

    
#!/usr/bin/python
# -*- coding: utf-8 -*-


import socket
import os
import sys
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web


WS_LISTENING_PORT = '41072'


class WebSocketServer(tornado.websocket.WebSocketHandler):
    '''WebSocket event handler class'''

    _log_file = None

    def open(self):
        if self._log_file is None:
            self._log_file = open('/var/log/websocket_server.log', 'at')
        self._log_file.write('WebSocketServer::open : new connection')

    def on_message(self, message):
        self._log_file.write(
            'WebSocketServer::on_message : message received:  %s\r\n' %
            message)
        self._log_file.write(
            'WebSocketServer::on_message : sending back message: %s\r\n' %
            message[::-1])
        self.write_message(message[::-1])

    def on_close(self):
        if self._log_file is not None:
            self._log_file.write(
                'WebSocketServer::on_close : connection closed\r\n')
            self._log_file.close()
            self._log_file = None

    def check_origin(self, origin):
        return True


def websocket_handler_main(app):
    '''websocket main procedure'''
    pid = os.fork()
    if pid > 0:
        pid_file = open('/var/run/websocket_serverd.pid', 'w')
        pid_file.write(str(pid)+"\n")
        pid_file.close()
        sys.exit()

    if pid == 0:
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(WS_LISTENING_PORT)
        my_ip = socket.gethostbyname(socket.gethostname())
        print('*** Websocket Server Started at %s***' % my_ip)
        tornado.ioloop.IOLoop.instance().start()


APP = tornado.web.Application([
    (r'/ws', WebSocketServer),
])

if __name__ == "__main__":
    websocket_handler_main(APP) 

インストール


こんな手順で

    
chmod 755 ./websocket_serverd.py 
cp ./websocket_serverd.py /usr/local/sbin
mkdir /usr/lib/systemd/system
sudo cp ./websocket_server.service /usr/lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable websocket_server

再起動かsystemctlでサービス開始。クライアントプログラムはここに載っているHTMLのコードをそのまま使う。

2017年6月24日土曜日

Bluetooth audio 垂れ流し

ラズパイで音を鳴らしてみたくてDACを頼んだは良いけど未だ来ない。涙目にやられて海外に注文する俺が悪い。来る前にとりあえずBluetoothスピーカーもどきにしておく。

インストール&設定&実行


ここを頼りに進めようとして、長いなぁとげんなりしていたら、コメント欄にがいたのでそっちを使う。

A simple Bluetooth Speaker Daemon for the Raspberry Pi 3

    sudo -i
bash <(curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh)

おわり。もう動いているのでiPhoneからBluetoothデバイス探索して繋げて音楽でも再生すれば流れる。


サービスの開始停止は

  • sudo systemctl stop bt_speaker
  • sudo systemctl start bt_speaker



2017/6/25 追記
カメラとマイクでレコーダー載せてったら使えなくなっていた…なんでじゃ…。
なので、結局ここの手順を実施(rpi-update以外)。
hcitoolとかbluezとか知るべき事があったんだからこれで良かったんだ…きっと。

2017年6月20日火曜日

chromiumをつかったキヨスク

全画面UIでデスクトップ覆われたKIOSKをやってみるとすごくデバイスっぽいのでやってみたかったのでやってみた

自動起動の設定(piだけど)


普通なら別ユーザーを割り当ててデフォルトログインユーザーにしてとやるのだろうけど、面倒なのでpiのまま。ここの4の前半だけ使う。

GUIログインの自動起動設定を開いて

    cp ~/.config/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/autostart.org
vi ~/.config/lxsession/LXDE-pi/autostart

設定を変更する

    @lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@point-rpi

@xset s off
@xset s noblank
@xset -dpms
@chromium-browser --noerrdialogs --kiosk --incognito http://localhost/

apacheが動いていればデビアンなデフォルト画面がログイン後に邪魔をしてくれる。ホントに邪魔だからAlt+F4で閉じる。元に戻しておしまい。

いわゆるアレ

やっぱり手順で困らなかったのでリンクとズルコマンドだけ

apache2 php5 php5-mysql mysql-server phpmyadmin


詳しくはここ

    sudo apt-get install apache2 php5 php5-mysql mysql-server phpmyadmin

2017年6月19日月曜日

2017年6月18日日曜日

ELECOM WDC-433DU2Hをラズパイで

遅かったな、もう買っちまったぜ
ラズパイで使えるようにしてた神様がいたので助かった。

それでも一度やってみたら躓いて、今はやらなくても良い手順もあったようなのでメモ(そしてこれもすぐ腐海にのまれる...)


ビルド環境の準備


ほぼここの内容。今のjessieはgccのバージョンを問題にしないみたいなので、色々スキップ。たたいたコマンドはこれ

    sudo apt-get -y install ncurses-dev
sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source && sudo chmod +x /usr/bin/rpi-source && /usr/bin/rpi-source -q --tag-update
sudo apt-get install bc
rpi-source

多分、ここに至るまで apt-get upgrade を叩いたことが無い のが良かったのかなぁと...


ドライバの準備とインストール

ほぼここの内容。WDC-433DU2Hの定義はすでに含まれてた。


ドライバの取得して展開して編集して

    wget https://github.com/gnab/rtl8812au/archive/master.zip
unzip master.zip
cd rtl8812au-master
vi Makefile

Makefileはi386にn、RPIにy

    CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_JB_X86 = n
CONFIG_PLATFORM_ARM_S3C2K4 = n
CONFIG_PLATFORM_ARM_PXA2XX = n
CONFIG_PLATFORM_ARM_S3C6K4 = n
CONFIG_PLATFORM_ARM_RPI = y

makeしてインストール

    make
sudo make install

後は/etc/network/interfaceにwlan2を追加して云々してsyncしてsudo reboot



無駄金にならず済んだ...