python勉強し始めたらpipで早速ハマった話

 Python始めました。

 キーボード作るのはいいけどお前それでやることがツイッターだけってどうなのよ

ってことで、まじめにプログラミングの勉強を始めることにしました。

スクリプト言語って敷居低そうじゃん?とかいう頭の悪そうな考えで↓を読み始めました。

www.oreilly.co.jp

  

7ページ目で詰まった。

速すぎる。また世界を縮めてしまった。

 本当は

「今日はxxページまで進みました。楽しかったです。」

みたいな記事を書こうと思ってたのに、

この本で最初から最後まで使うBeautifulSoupのimportが早速うまくいかない。

pipとかpip3とかeasy_installとか何回か試したものの、何回やっても↓になる

>>> from bs4 import BeautifulSoup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'bs4'

 

見た感じインストールうまくいってないっぽい?

そしてインストールしたパッケージは↓に行くらしいんだけどない。

C:\Program Files\Python36\Lib\site-packages

 

でもpipちゃんはInstall成功しました!ほめて!って言ってくる。かわいい。

 

Install先が違った模様

成功したとか言ってるし多分どっかにはあるんだろうと思って、

pip自体の失敗談を調べてみたら以下の記事を発見。

qiita.com

ははーんってことで探してみたら以下にあった。

 C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python36-32\Lib\site-packages

ついでにここのpython.exeで動かしたら普通に動いた。

検索しても検索しても「お前Python2にインストールしただろバカ死ね」っていう記事とかFAQとか知恵袋ばっかり出てきて心が折れそうだった。

 

VisualStadio入れた時に二重でpythonがインストールされたっぽい?

とりあえず多分僕が悪い。

 

明日全部(VisualStadioとか)アンインストールしてやり直すことに決定。

大きめのエンターキーを作った。

 

 

1.事の発端

リツイートして、こんなんそこらへんに捨ててあるキーボード分解して使えばいいやんけ。4,800円もするんか、と思っていたところ、

 と、偶発的な巻き込みリプなんだろうけどぜひって言われてしまったのでじゃあやってみようというものです。

 

2.材料

メンブレン式の適当なキーボード

酔った勢いで買ってきました。無線だと改造で技適であれになっちゃうので有線です。

f:id:SoranoHashibiro:20170908234203j:plain

メカニカルスイッチ

 クリック感のない静かなタイプのスイッチを選びました。音は下に動画を公開してあるのでそこで確認してください。左のビールはサイズ比較用です。

f:id:SoranoHashibiro:20170908234119j:plain

3.作成工程

3-1.キーボードをはがす

f:id:SoranoHashibiro:20170908234218j:plain

3-2.エンターキーが押されたときに0Ωになるペアを探す

f:id:SoranoHashibiro:20170908234120j:plain

 

3-3. ペアの配線をそれぞれ伸ばしてメカニカルスイッチにつなげる。

 はじめてエンターキーのデザインに挑戦してみました。

f:id:SoranoHashibiro:20170908234136j:plain

3-4.完成。(はてなブログは動画が直接アップロードできないってまじでか。)

 

4.所感

20本以上の配線からエンターキーのペア探すのがめんどくさかった。

 

4-1.キーボードを自作できる基板について

今回エンターキーを作った感想を踏まえ、

・特定のいくつかのキー(エンターキーとかコピペとか)だけ欲しい

・そういうの作る方法を調べる時間を4,800円で買いとりたい

・普段文章を打つのに使うような普通のキーボードの自作にはあまり興味がない

ような人にはおすすめの基板だと思いました。

 

ただ、これにキーを全部つなげて普通に使えるキーボードを作る、とかなら、買う前に少し調べたほうがいいんじゃないかなぁ……。今時はarduinoでもHIDキーボード簡単に作れるらしいし。

 

4-2なぜこの手のキーボードの分解改造話はあんまり見かけないのか。

僕の検索力のせいかな?

 

有線キーボードの改造はわざわざやるメリットが少なくて、

無線キーボードの改造は技適に引っかかるから公に出来ない。

ということなんだろうか。

 

メンブレンシートを導電インクで改造しましたとか、そういう記事があってもいい気がするんだけどなぁ。

 

https://twitter.com/flint_tec/status/904879624437456897

あzsdふぁふぁsdfhttps://twhttps://twitter.com/flint_tec/status/904879624437456897https://twitter.com/flint_tec/status/904879https://twitter.com/flint_tec/status/904879624437456897624437456897itter.com/flint_tec/status/904879624437456897

スマホから赤外線リモコン

これも旧ブログ移行ついで。
久しぶりに触ってたら条件分岐で==を使わずに=を使ってたりして赤面。

やったことメモ。

■ハードウェア
ハードウェアはつなげるだけなので書かなくてもええやろ、みたいなのもホントは良くないんだろうなぁ。
一応SC1815使ってGPIO直出しじゃない状態にしました。
設定的には赤外線LEDに500mA~1Aぐらい流す感じだったと思う(3.3VでLEDにつないで制限抵抗は2~4Ωぐらい)。
SC1815の定格は満たしてないけど、トランジスタの定格ってほぼ熱の問題だと思うので、
パルスでの使用だったら越えてもどうにかなると思う。どうにかなれ。
一日4~5回使う程度なので多分まず壊れないと思う。

■ソフトウェア
1.express-generatorを使って雛形作成。

 jadeにあこがれるものの学習がなんとなく面倒なのと
 参考サイトがejsだったのでejsで作成。

2.viewsにusers.ejsを作って以下を記述

<!DOCTYPE html>
<html>
  <head>
    <title>smart-remote</title>
    <style type="text/css">
      input.button {
        width:150px;
        height:150px;
        font-size:1.8em;
      }
    </style>
  </head>
  <body>
    <form method="GET" action="/users">
      <input type="submit" name="onoff" value="on" class="button"/>
      <input type="submit" name="onoff" value="off" class="button"/>
    </form>
  </body>
</html>

③の記事を模倣させていただきました。いらなかった箇所を削りました。

3.routesのusers.jsを以下のように編集

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  var execSync = require('child_process').execSync;
  console.log(req.query);
  var onoff = req.query.onoff;
  if(onoff=='on'){
    execSync('sudo /home/hoge/ir-remote/sendir /home/hoge/ir-remote/lighton.dat 1 0');
  }
  if(onoff=='off'){
    execSync('sudo /home/hoge/ir-remote/sendir /home/hoge/ir-remote/lightoff.dat 1 0');
  }
  res.render('users', {message: onoff});
});
module.exports = router;

これもほぼ③の記事を模倣させていただきました。
nodejsからシェルコマンドを実行させるのでexecSyncをつかってます。②の記事を参考にさせていただきました。
分岐後に使ってるsendirとそれで読みこんでるdatを作ってるscanirは
①の記事にあるソースをそのまま使わせていただきました。

4.雛形の根元でnpm start

いまだにnpm startの意味が分かってないの良くないと思うんだけど保留。

5.自動起動設定

⑤の記事を参考にrc.localになんとなく記載。雛形の根元にcdしてnpm start。
systemd推奨とはあったものの、ちょっとオプションが多くて意欲がわかず。


ソースをgitで管理してれば後からraspberry Piから直接引っ張ってこれていいんだろうなぁと思うんだけど、
なかなかgitを学習する意欲が……。

■ 以下参考
★今回は以下のサイトを参考にさせていただきました。
www.feijoa.jp
www.sirochro.com
Node.js(2) GPIOraspberrylife.wordpress.com
④[s4kr4.hatenablog.com
hendigi.karaage.xyz



④の記事より、便利だったので引用しておかせていただきます。

wiringPiで使用するPIN番号を調べる。
$ gpio readall
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 1 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 1 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 0 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | OUT  | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+

★マークダウン学習までやる気が回らなかったのでとりあえずはてな記法を始めた。
help.hatenablog.com



■今後?
gitに家の温度データを蓄積させていくとかそういう使い方で無理やり使って学習を進めようかなぁ。
CSS勉強かねて、はてなブログ見出しの番号振りをどうしてたかがまたなんか思い出せなかったので今度記事に起こす。

nodejsこと始め。

 そういえばこっちの記事ではラズベリーパイについて書いてなかったのでこれも移動ついで。

 

qiita.com/seibe/items/36cef7df85fe2cefa3ea

導入手順

まず普通に nodejs, npm をインストールします

$ sudo apt-get install -y nodejs npm

次に n package を導入します

$ sudo npm cache clean
$ sudo npm install n -g

最後に n package を使って node をインストールします

$ sudo n stable
$ sudo ln -sf /usr/local/bin/node /usr/bin/node

ちゃんと最新かどうか、バージョンを確認してみましょう

$ node -v
v5.2.0

※ 最初に入れた nodejs, npm は古いので、混乱を避けるべく消しちゃいます

$ sudo apt-get purge -y nodejs npm

 

 

 

 

ラズベリーパイとnodejsについてはずっと以下のサイトを参考にさせてもらっている。

 

Node.jsraspberrylife.wordpress.com

 

Webアプリのひな形を自動生成してくれるフレームワーク「express」が非常に便利なので、これもインストールしておく。インストールにはNode.jsに含まれるパッケージ管理ツール「npm」を使用。

1
$ sudo npm install -g express-generator

 

 

 

expressでWebアプリのひな形を作成し、起動するには以下のように行う

1
2
3
4
$ express -e MyWebApp
$ cd MyWebApp
$ npm install
$ npm start

 

とりあえずこれで

http://"IPアドレス":3000/

から

Express

Welcome to Express

が確認できた。

 

コピペプログラマなのでブログまでコピペで終わらせる。

ブログじゃなくてクリップボードって名前にした方がいい気がしてきた。

ラズベリーパイを開始しました。

友人からの熱いマークダウン推しなどもありましたが普通にやります。

Atomを入れたら真面目に考えるかも。

でもなんかうまくいかないのでしばらくはやらないかも。

 

 

ラズベリーパイしばらく触ってなかったのは

OSをインストールしなおしたらsudo権限の移行方法がわからなくなってしまったせいで、

調べなおしたら以下にあった。

jyn.jp

 

そしてパスワードなしsudoを出来ないようにするには……

追記:いつからかやり方が変わりました

「/etc/sudoers.d/010_pi-nopasswd」を開き、「pi ALL=(ALL) NOPASSWD: ALL」をコメントアウトします。

もしくは「sudo rm /etc/sudoers.d/010_pi-nopasswd」でファイルそのものを消してしまいましょう。

古い方法:「sudo visudo」でファイルを開き、「pi ALL=(ALL) NOPASSWD: ALL」をコメントアウト

 というわけで、visudoからsudoersを編集するんじゃなくて、

sudoers.dの中にそれっぽいものを突っ込めばsudoできるようになるよってことみたい。

というわけで障壁がだいぶ下がったので再開。

一個詰まると一か月死ぬってことはよくあることよね。

 

とりあえず三点セット実行した、はず。

sudo rpi-update
sudo apt-get update
sudo apt-get upgrade

 

めも。

油断していたらまたシフトレジスタとか買いそうになってた。いややりたいならいいんだけどさ。
→レベルメータのLEDバー?を買ったので今度遊ぶ

≪作ろうとしているもの雑記。あとで整理、清書≫

Wi-Fi越しにラックの照明をオンオフする。
→esp8266つかう

12vのLEDモジュールを3本出力したい。
→出力用のDCジャックとFETをつけよう。

家電のオンオフしたい。
→ACは怖いのでモジュールを別につくる。
制御用のグランドと信号を出す
いい感じの2pinのジャックとコネクタが欲しい


オンオフ用のGPI/Oは足りるのか?
→i2cのGPI/Oのやつがあるみたい。
★これは勉強になりそうだしGPI/Oは16ビットまど拡張できるもつかえみたい。やろう。

状態を確認したい
→i2cのLCDつけよう

時計の代わりになんないかな
→試しに7セグつける?
→いらなそう、小さくて見なそう、眩しそう



12vから3.3vつくったりケースにいれたりして温度は大丈夫?
→多分。やってみてから?電流の確認方法が欲しいところ。一定以上になったらアラームとか。
→電流センサ探す。

固定どうすんの
→ナットとかでネジ止め予定。迷いどころ。
少なくともACはエポキシで固める。

計画的なもったいない注文

お金を出して時間を節約したい。

下の2つのパターンのような感じで、一度やったことはお金を出してでも回避していくように進めていこうと思う。

パターン①

ガラクタ箱を掃除していたら16x2のキャラクタLCDが二枚出てきた。

そういえば汎用ロジックICの595があったから3線制御でLCD制御ができそうだ。

●でもそれやったことあるしI2Cの方が手っ取り早そうだし今後の為にもなりそう。

●時間はないけどお金はある。

 ⇒出てきたLCDを捨ててI2C対応のLCDをポチった。

 

パターン②

ソリッドステートリレーキット作った

●ヒューズついてなくてなんか怖いし基盤が小さくて筐体への固定が面倒くさそう

●時間はないけどお金はある

 ⇒実装しやすそうなパッケージ化されてるSSR

  実装しやすそうなヒューズをぽちった

  ※あ、バリスタを発注し忘れてた。パッケージに入ってるかな。

 

雑記

作りたいものをざっくり決定したのでいろいろ探してたところスーパー三端子レギュレータなるものを見つけた。三端子レギュレータにもリニアレギュレータとスイッチングレギュレータがあるんだね。

そのうち二つのデータシートを眺めて記事を書こうかなと思う。

背景として、12Vを電源として使いたかったんだけど、リニアレギュレータで12Vから3.3Vを作るのはターゲットよりもレギュレータの方が消費電力が高いとかいう状態になってしまうので少し抵抗があって探してた。

検討はデータシートをちゃんと読んでからだけど、以下4点から多分リニアレギュレータを使うことになる。

 ・スーパー何とかを使うことに特に勉強成分がない(データシートを読めば十分)

 ・0.1A程度なら多分リニアレギュレータで行ける

 ・価格が高いし実装面積もリニアレギュレータより大きいかどっこいどっこい

 ・時間短縮にはならない。

以上。