PCBWayというよりDHLのお話

深圳でてから香港出るまでが約5時間。
成田出てから東京出るまでが3時間半。
東京出てから横浜到着までが17時間。
どうすりゃそんなにかかるんだw
途中までは流石のDHLと思ってたけど、日本に入って大減速...
基板を作るのにアセトン+光沢紙プリントを使っていたけど、いい加減面倒になってきた。0.65mmピッチの足とか両面基板とかビア打ちとかの時間を考えたら注文した方が楽だろ。と、自作基板で遊ぶのに飽きてきた言い訳を作り、発注してみることにした。Fusion PCB とか Elecrow とか PCBWay とか、どれも一長一短みたいなので、どれ選んでも一緒だろと言う事で、PCBWayでやってみた。
ガーバーファイルのアップロードが終わると支払い。PayPalで払うと8ドル追加が必要。Wenstern Union なら追加費用無いのか…セブン銀行?
年が明けたばかりで、ちゃんとサクサク進むのかな?
2018/1/6 作業が完了してデリバリー始まってた。出荷の通知もメールで来たし(迷惑メール扱いされてたので除外リストに登録w)、ポータルのダッシュボードで状況確認出来るし、ここまで文句なし。
実装まで頼むとTestingのところにチェックが入るのかな?
Atomが素晴らしいエディタと言ったか?アレはやっぱり嘘だ。要はPlatformIOが使いたいだけで、それがVSCodeにあるってわかったからそっちに戻るというだけ。これを見てESP-IDF+VSCodeで行けるか?と希望を持ったけど、ソースコードから波線が消えなくて絶望してたら、いつの間にかVSCodeにPlatformIOが来てて、シリアルポートも使えたのでこっちに移行。VSCodeさえあればいい。
拡張機能の検索で"Platform"とでも入れる
Jan Hanさん知らないから上のほうで。
HomeタブでNew Project
ボードは適当に好きなので
FrameworkはとりあえずESP-IDF
プロジェクトの保存先を決めて
作ったプロジェクトの場所をVSCodeが勝手に開きなおしてくれる
hello_world_main.cファイルをsrcディレクトリに追加してここからHello worldのソースをコピペ
あとはビルドしてアップロード
でシリアルモニタで見てみると
見事に文字化け。9600bpsで繋がってるっぽいので platformio.ini にボーレートの設定を追加。
ほぼほぼ治った...なんか残るけど。
なんでCOM3でうまく繋がってるんだろ?
undefined reference to `esp_a2d_register_callback'
...まじかよ...ESP-IDFに戻るか...
Why name Frog?を見ると、どうやらただのカエル好きらしいが、自分はモジュールを外すと、モジュールが吹っ飛んでくからその名前にしたと思っている。モジュールは吹っ飛んでくけど、差し替え可能なのはありがたい。
デバイスマネージャで見るとCOM3が割り当てられていたので、make menuconfigで、Serial flasher config→Default serial port→で"COM3"を設定
あとはmake flashして書き込む…のだが、MINGW32のプロンプトに"Connecting..."と出てきたらPROGボタンを一度押す。これをしないでTimeoutになること2回...本当はArduinoやPlatformIOでやりたい。
確かtwitterで見かけて、即買って半年以上放置してたんだよな…それでもPlatformIOのボードリストに出てこないし、なんで使われなかったんだろ?差し替えのニーズって無いのかな?それとも出どころの所為だろか?
そもどうやって差し替え実現してるのか知りたくて買ったんだよな。届いたときは結構笑った。
1つ注文してその一つがぶっ壊れてるとめんどくさいから値段によっては2つ頼むのだけど、1つはプッシュボタンスイッチの先端が折れてなくなっていた。その辺はやっぱり中華クオリティ。だけど使う分には困らないのでただの予備になった。ピンヘッダの折り方雑だもんな...というか製品に折って使うなw
ともあれ、いろいろ愉快な製品。
Super Simple Raspberry Pi Audio Receiver Installでサウンドカードも入れるとpHAT DACは出てこなかったので、回避する手順。当たり前な手順のメモ。
はここのAutomated Set Up
curl https://get.pimoroni.com/phatdac | bash
はここの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を選択すればそのまま使われる。
そりゃそうだ。
BLEやPiCameraを外からコントロールしたいと思ったけど、PHPとかのページから叩くのはなんか違うと思ったので、TornadoでWebSocketのサーバを作ってみた。内容はこことここの組み合わせ。
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のコードをそのまま使う。
ラズパイで音を鳴らしてみたくて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デバイス探索して繋げて音楽でも再生すれば流れる。
サービスの開始停止は
で
2017/6/25 追記
カメラとマイクでレコーダー載せてったら使えなくなっていた…なんでじゃ…。
なので、結局ここの手順を実施(rpi-update以外)。
hcitoolとかbluezとか知るべき事があったんだからこれで良かったんだ…きっと。
全画面UIでデスクトップ覆われたKIOSKをやってみるとすごくデバイスっぽいのでやってみたかったのでやってみた
普通なら別ユーザーを割り当ててデフォルトログインユーザーにしてとやるのだろうけど、面倒なので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で閉じる。元に戻しておしまい。
遅かったな、もう買っちまったぜ
ラズパイで使えるようにしてた神様がいたので助かった。
それでも一度やってみたら躓いて、今はやらなくても良い手順もあったようなのでメモ(そしてこれもすぐ腐海にのまれる...)
ほぼここの内容。今の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
無駄金にならず済んだ...
ラズパイを持ち歩いているときでも、ラズパイにWifiで繋がりたい。でもネットワークにつなげられる時はラズパイ自身もインターネットに繋がりたい。なので、ちっこいUSBドングルはラズパイ自身のインターネット接続用。Pi3自身のWifiはアクセスポイントとして他のクライアントから繋ぎにこれるようにしてみた。
やり方も、必要なものも、まるまるここに書いてあった。apt-getするだけ
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install hostapd dnsmasq
/etc/hostapd/hostapd.confを作って編集。内容はここのCONFIGURE HOSTAPDを丸写し。パスフレーズだけこんな感じで変更。
# The network passphrase
# wpa_passphrase=raspberry
wpa_passphrase=iukosoyorasshaimashita
作った設定を読み込ませるために /etc/default/hostapd を編集
#DAEMON_CONF=""
DAEMON_CONF="/etc/hostapd/hostapd.conf"
手順はここのCONFIGURE DNSMASQを丸写し。オリジナルをリネームしてから/etc/dnsmasq.confを作り編集。ここPaste the following into the new file:の内容をコピーしてベタリと貼り付け。待ち受けアドレスとDHCPサーバとして配布するアドレスの範囲だけ変えた。
interface=wlan0 # Use interface wlan0
#listen-address=172.24.1.1 # Explicitly specify the address to listen on
listen-address=192.168.100.100
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
# dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time
dhcp-range=192.168.100.150,192.168.100.199,12h
ここのSET UP IPV4 FORWARDINGに従い進めた。
なにはともあれ、IPv4フォワードの有効化。/etc/sysctl.confを開いて編集
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
例だとwlan0へ繋ぎに来たクライアントを有線LANのeth0から外に出してあげてるので、ここをwlan0に繋ぎに来た、wlan1から外に出してと読み替えて以下のコマンドを実施。
pi@raspberrypi:~ $ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
pi@raspberrypi:~ $ sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
pi@raspberrypi:~ $ sudo iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
pi@raspberrypi:~ $ sudo iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
pi@raspberrypi:~ $ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
最後に自動起動の設定をする。/etc/rc.localを編集
iptables-restore < /etc/iptables.ipv4.nat
exit 0
保存したらサービス開始
pi@raspberrypi:~ $ sudo service hostapd start
pi@raspberrypi:~ $ sudo service dnsmasq start
SSIDの候補になんか出てくるかと思いきや出なかったので、困ったときのリブート
SSIDを変えたければ/etc/hostapd/hostapd.confを編集
# This is the name of the network
# ssid=Pi3-AP
ssid=KEISATSUJYANAI
多分SSH切れてるけど。
ラズパイをWifi中継器(ルーター?)的な使い方させたいので、まずはWifiの設定
使っているのはRaspberry Pi 3 Model B。Wifiのドングルを一個追加。
まずはラズパイ自身をアクセスポイントに接続しなきゃなので、パスフレーズを生成
pi@raspberrypi:~ $ wpa_passphrase hogeSSID hogePassphrase
network={
ssid="hogeSSID"
#psk="hogePassphrase"
psk=8187709bc50de0f88093f429...8e8
}
Wifiの接続設定をSSID用にコピーして
pi@raspberrypi:~ $ cd /etc/wpa_supplicant
pi@raspberrypi:~ $ sudo cp wpa_supplicant.conf wpa_hogeSSID.conf
コピーしたファイルに接続設定を追加(countryもGBからJPに)
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="hogeSSID"
#psk="hogePassphrase"
psk=8187709bc50de0f88093f429...8e8
}
wlan1の設定が作ったWifi設定を参照するよう /etc/network/interfaces の iface wlan1 ... のところを編集。
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_hogeSSID.conf
ネットワークを下げ上げしておしまい
pi@raspberrypi:~ $ sudo ifdown wlan1
pi@raspberrypi:~ $ sudo ifup wlan1
とにかくつながったのでおしまい
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
固定IPでDHCPのクライアントとしては使わないので、/etc/dhcpcd.confに以下を追加。
denyinterfaces wlan0
wlan0の設定を変えるので /etc/network/interfaces の iface wlan0 ... のところを編集。
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.100.100
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
ネットワークを下げ上げしておしまい
pi@raspberrypi:~ $ sudo ifdown wlan0
pi@raspberrypi:~ $ sudo ifup wlan0