じょりらぼ

野菜だったりプログラムだったり電子工作だったり

CentOS7.6 python 2.7.5 で opencvを使えるようしたときのメモ

 sudo pip install --upgrade pip
 sudo pip install numpy
 sudo pip install opencv-python
 sudo pip install opencv-contrib-python

を実行してみるものの、cv2をインポートするとこんなエラーが

 Segmentation fault

matplotlibを入れてみることに

 sudo pip install matplotlib

そうするとエラーの内容は変わったが、今度はnumpyでエラーをはくようになった
以下のサイトを参考に対処

qiita.com

すると、こんどはnumpy側のエラーが
なんでやねん
pipからuninstallしても消えてないので、強制的にlibのpythonの中のsite-packagesのnumpyを削除
んで、再インストールするとなんか動いたくさい

雷センサ

買ったわけじゃないですが、こんなセンサがあるんだなーと思ったので。

www.switch-science.com

akizukidenshi.com


何に使えるかなー
雷が発生したら電子機器とか電源落としちゃうとか?

あとは個人的な趣味の範疇として気象データの取得かなー
気温や光量、湿度なら家庭菜園の野菜の管理とかにつかえそうだけど、雷は・・・(笑

複数のMPR121をI2Cでつなぐ

解決してない、未解決事案!(笑

MPR121を複数、例えば2つつないでそれぞれ0x5A、0x5Bのアドレスを割り当てます。
そんでもってAdafruitが公開しているライブラリを利用して
Raspberry piからpythonを使って接続してみる

2つつなぐ分にはタッチしかどうかちゃんととれてるんですが、
これが3つになるとなぜかうまく反応しない
厳密なこというと、3つつないでも2つしか反応しない感じ、なぞす

プログラムの問題や配線の問題もありそうだけど、
単独なら問題ないんだよなー、配線の問題という線は薄そう

【成功】raspberry piでマルチプレクサ(PCA9547)

前回の続き

前回の記事で書いた予想は的中
下手な絵で書くとこんな感じ
f:id:labo831:20190913084417j:plain

ためしにPCA9547へ信号を送ってぶらさがってるセンサが切り替わるか実験です。
Pythonから切り替えの信号を送るサンプルは以下の用な感じで書きました。

※PCA9547のアドレスは0x70で、5chのセンサへつなぐ場合

import smbus
import time

i2c = smbus.SMBus(1)

addr = 0x70
cmd = 5 & 0x07
cmd = cmd | 0x08
i2c.write_byte_data(0x70, 0x00, cmd)

参考文献

どうですかね?うまくいきましたか?

【失敗】raspberry piでマルチプレクサ(PCA9547)

現在作成中ですが・・・
静電容量センサ(MP121)を10個つなげたい!
だけど0x5A~0x5Dの4つしかアドレスはありません、I2Cで通信したいのにアドレスが被っちゃう!

そんな重複を回避してくれるのがマルチプレクサです。
秋月電子に売ってたPCA9547を使ってみることにしました。
まぁ、半田が下手すぎてこいつの表面実装に苦労したんですが・・・まぁそれはさておいて

PCA9547は8chあるので、2つは直接つないで、
残り8つはPCA9547を通してつなげればいいやーとおもってつないでみたものの
なんだかいい感じに動かず
i2cdetectでアドレスは取れてくるからちゃんと動いてるだけどなーと思って悩みながら一晩経過
(残り8つのアドレスは0x5Aのまま、マルチプレクサのアドレスは0x70


いろいろググりながら調べてるときに
このサイトをみてハッと気づきました。


0x5Aのアドレスが重複してるんじゃね?


よくよく考えればあたりまえなんですが、
マルチプレクサはぶら下がってるセンサを切り替えるだけであって、
センサそのものアドレスが0x70になるわけじゃないんですね、たぶん

うん、いい感じに動かなかったのはこのせいだ
再度トライしてみよっと・・・

ConoHaでSSL化してみる(CentOS7/nginx)

流れは常時SSL化なので波にのっちゃうしかないでしょ。

作業前の状態

・CentOS7
・ nginxをインストール&起動済み
sshも起動済み
・独自のドメイン設定済み

まずはポートの確認

  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

うん、httpsが空いてないね、なので空けます

firewall-cmd --permanent --add-service=https --zone=public
firewall-cmd --reload

これだけ、再度確認して、httpsが追加されてればOKです

証明書をインストールする

あくまで個人サイトのレベルなので無償で証明書を作ってくれるLet's Encryptを利用します。
有名なやつですね。
Let's Encryptは証明期間が90日なのですが、90日立つたびに手作業で証明を入れ替えるのはめんどうです。
故にcertbotと呼ばれるものを利用します。

git clone https://github.com/certbot/certbot

gitが入っていないようであれば「yum install git」とでも打ってインストールしちゃってください。

次に証明を作っていきます。

cd ./certbot
sudo ./certbot-auto certonly --webroot -w /home/hogehoge/html/ -d hogehoge.com

「/home/hogehoge/html/」はnginxのルートディレクトリ、
hogehoge.comは取得したドメインに書き換えてくださいね。

あとは質問に答えていきます。
メールアドレスの入力とライセンスに同意するかの確認、
また、メールアドレスにメルマガ的な通知がいるかの確認、そして最後にドメインの入力です。

うまく証明書ができあがると下記フォルダにデータが出来上がります。

/etc/letsencrypt/

サーバに設定するときは「/etc/letsencrypt/live/」配下のフォルダにあるシンボリックリンクを使うようです。
シンボリックリンクは常に最新を指し示すようです。

nginxを設定する

nginxの設定は特になにも変えてなければ「/etc/nginx/nginx.conf」にあるかと思います。
そのファイルの中にhttpの設定があると思いますので、
その中にhttpsの設定を書き加えます。

server {
     ・・・
     listen 443 ssl;
     ssl_certificate      /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
     ssl_certificate_key  /etc/letsencrypt/live/hogehoge.com/privkey.pem;
 ・・・
}

「sudo nginx -s reload」でサービスを再起動してhttpsでアクセスしてみましょう!
どうですか?見れましたか?やったね★

httpのアクセスをhttpsへリダレクトする

httpsを設定したなら積極的に使いたいですよね!
httpアクセスをhttpsへリダイレクトするようにしてみます。

「/etc/nginx/nginx.conf」を以下のように書き換えました。

変更前

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  hogehoge.com;
        root         /home/hogehoge/html;

        # SSL
        listen 443 ssl;
        ssl_certificate      /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/hogehoge.com/privkey.pem;
        ・・・
    }

変更後

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  hogehoge.com;
        root         /home/hogehoge/html;

        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        ssl_certificate      /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/hogehoge.com/privkey.pem;

        server_name  hogehoge.com;
        root         /home/hogehoge/html;
        ・・・
    }

証明書を自動更新してみる

cronをつかって定期的に証明書を自動生成するようにしてみます。

0 2 1 * * /home/hogehoge/certbot/certbot-auto renew --post-hook "/bin/systemctl reload nginx"

これで月初めの夜中の2時に動くはずです!たぶん!

MPR121のアドレス変換

ちょっと悩んだのでメモ
MPR121をI2Cで複数つなげるときはアドレスが重複するので変更する必要があるのですが、
以下のようになっています

ADDR -> GND 0x5A(デフォルト)
ADDR -> VDD 0x5B
ADDR -> SDA 0x5C
ADDR -> SCL 0X5D

デフォルトはGNDにつながっているのですが、
アドレスを変更するにはADDRの繋げさきをGNDからVDDとかに変更する必要があるのですが、
これがわからんかった!

f:id:labo831:20190910000223j:plain

ちょっとわかりにくいかもしれないけど、
写真の右端の端子?銀色のやつの間はつながっていて、どうもそれがADDRとGNDらしい
なのでここんとこをカッターナイフとかでガリガリと削ってカットして、
その上でADDRをVDDへつなげたら無事、アドレスが変換できたとさ


めでたし、めでたし