How to Use MCP3425 ADC 16-Bit Mode with Raspberry Pi (Python)

Raspberry Pi cannot acquire analog values. However, Arduino is equipped with ADC as standard, but the performance is on the odder of “10-Bit(0 – 1023). The MCP3425 used in this article is 16-Bit and can also perform I2C connection. Furthermore, It’s possible to measure not only positive values but also negative values.

1  Configuration of MCP3425

The Configuration of the MCP3425 is as follows.

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-2
Diagram

Wiring diagram of MCP3425 and Raspberry Pi.

untitled-sketch_%e3%83%96%e3%83%ac%e3%83%83%e3%83%89%e3%83%9c%e3%83%bc%e3%83%89
Battery Voltage Measurement Example

Check the I2C connection with the command.

$ sudo i2cdetect -y 1

2  Use MCP3425 with 16-Bit Mode

Control MCP3425 using Python. The following program acquires the analog values and display the voltage values.

$ vi mcp3425.py

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

import smbus
import time
bus = smbus.SMBus(1)
bus.write_i2c_block_data(0x68, 0b10001000, [0x00])
time.sleep(1)

data = bus.read_i2c_block_data(0x68, 0x00, 2)
raw  = data[0] << 8 | data[1]

if raw > 32767:
   raw -= 65535
vol = 2.048 / 32767
print str(raw*vol) + " [V]"

3  Explanation

Bit Value Explanation
Bit 7 1 Initiate a new conversion.
0 No effect.
Bit 6 0 Do not use. Select value 0.
Bit 5 0 Do not use. Select value 0.
Bit 4 1 Continuous conversion mode.
0 One-Shot conversion mode.
Bit 3-2 00 12 Bits. 240 SPS.
01 14 Bits. 60 SPS.
10 16 Bits. 15 SPS.
Bit 1-0 00 PGA Gain x1.
01 PGA Gain x2.
10 PGA Gain x4.
11 PGA Gain x8.

Reference : MICROCHIP – MCP3425 16-Bit Analog-to-Digital Converter with I2C Interface and On-Board Reference – Page 14

3.1  Write Setting

Refer to the above table and set the parameters. The following is the Write Setting. It’s arranged from Bit 7 to Bit 0.

bus.write_i2c_block_data(0x68, 0b10001000, [0x00])

無題の図形描画 (2).png

Radix Reference

Radix Prefix Example
Binary Number 0b 0b110
Octal Number 0o 0o310
Decimal Number 0d 0d209
Hexadecimal Number 0x 0x1F2

3.2  Read Setting

Receive data from MCP3425. Read using “bus.read_i2c_block_data”.

data = bus.read_i2c_block_data(0x68, 0x00, 2)

It’s necessary to properly format the read data.

raw = data[0] << 8 | data[1]

Let’s see what is contained in data[0] and data[1].

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb

The displayed value is Decimal Number. Conversion work is done in Binary Number.

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-1
Conversion Work
%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-1
Shift

About Shift :

raw = data[0] << 8 | data[1]

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-3

3.3  Measurement Result

ccc1

ccc2

Raspberry PiでMCP3425を16Bitモードで使う方法 (Python)

Raspberry Piにアナログ入力が無いことに不満を申す筆者です。Arduinoにはありますが性能が10ビット(0~1023)でこれまたなんとも心許ないです。さて、MCP3425では16ビットもの分解能を誇り、I2Cで通信することが可能なので容易に設定を行うことができます。更に、MCP3425はマイナス値も測ることが可能です。ここではI2Cの設定方法は記載しません(ググってみてください)。

1. – MCP3425の構成

はじめにMCP3425の構成を確認する必要がある。

上記画像ではMCP3425の役割とRaspberry Piに接続するための案内図。

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-2
MCP3425実図

MCP3425の方向は白い点を観て向きを確認。

Untitled Sketch_ブレッドボード.png
電池の電圧計測 (結線図)

実際に結線をして実際に動作しているかを確認コマンドで確認。

$ sudo i2cdetect -y 1

2. – 16Bitモードで計測を開始

PythonでMCP3425を操作する。電圧値が取得&表示されるプログラム。

$ vi mcp3425.py

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

import smbus
import time
bus = smbus.SMBus(1)
bus.write_i2c_block_data(0x68, 0b10001000, [0x00])
time.sleep(1)

data = bus.read_i2c_block_data(0x68, 0x00, 2)
raw  = data[0] << 8 | data[1]

if raw > 32767:
   raw -= 65535
vol = 2.048 / 32767
print str(raw*vol) + " [V]"

2017-02-03 04:02 レイアウトがズレて誤ったプログラムを記述していました。修正済みです。申し訳ございません。WordPressの仕様で勝手に変換されてしまうみたいです。

最後に実行。

$ sudo python mcp3425.py

測定結果は下に載せておきます。

3. – 解説

MCP3425のデータシートを参考にする。

bit 7

RDY:Ready Bit
This bit is the data ready flag. In read mode, this bit indicates if the output register has been updated with a new conversion. In One-Shot Conversion mode, writing this bit to “1” initiates a new conversion.
Reading RDY bit with the read command:
1 = Output register has not been updated.
0 = Output register has been updated with the latest conversion data.
Writing RDY bit with the write command:
Continuous Conversion mode: No effect
One-Shot Conversion mode:
1 = Initiate a new conversion.
0 = No effect.

bit 6-5

C1-C0: Channel Selection Bits
These are the Channel Selection bits, but not used in the MCP3425 device.

bit 4

O/C: Conversion Mode Bit
1 = Continuous Conversion Mode. Once this bit is selected, the device performs data conversions
continuously.
0 = One-Shot Conversion Mode. The device performs a single conversion and enters a low power
standby mode until it receives another write/read command.

bit 3-2

S1-S0: Sample Rate Selection Bit
00 = 240 SPS (12 bits),
01 = 60 SPS (14 bits),
10 = 15 SPS (16 bits)

bit 1-0

G1-G0: PGA Gain Selector Bits
00 = 1 V/V,
01 = 2 V/V,
10 = 4 V/V,
11 = 8 V/V

MICROCHIP社『MCP3425  16-Bit Analog-to-Digital Converter with I2C Interface and On-Board Reference』 14ページより引用

各種説明

各ビット ビット 説明
Bit 7 1 新しい変換を開始。
0 何もせず。
Bit 6 0 チャンネル選択ビットだが、このチップでは使いません。0を選択。
Bit 5 0 チャンネル選択ビットだが、このチップでは使いません。0を選択。
Bit 4 1 連続変換モード。
0 ワンショット変換モード。デバイスは1回の変換を実行し、低電力になる。
Bit 3-2 00 12ビットで取得。1秒間に240取得。
01 14ビットで取得。1秒間に60取得。
10 16ビットで取得。1秒間に15取得。
Bit 1-0 00 ゲイン 1倍。
01 ゲイン 2倍。
10 ゲイン 4倍。
11 ゲイン 8倍。

3.1. – 書き込み設定

これを参考にしてパラメータを設定した。以下のプログラムの一部がそれである。

bus.write_i2c_block_data(0x68, 0b10001000, [0x00])

端から並べていくのだ!Bit 7には新しい変換要求、Bit 6からBit 5は無視して0、Bit 4はワンショットコンバージョンモードの選択、Bit 3からBit 2までがビット指定(12ビットの場合 [00]、14ビットの場合[01]、16ビットの場合[10])、Bit 1からBit 0までがゲイン設定(1倍指定は[00]、2倍指定は[01]、4倍指定は[10]、8倍指定は[11])。これらをつなげる。今回であれば0b10001000という構成になった。ちなみに12ビットにしたければ、0b10000000です。

ちなみに基数の接頭表記法は下記の表に示す。

基数 接頭
2進数 0b 0b110
8進数 0o 0o310
10進数 0d 0d209
16進数 0x 0x1F2
無題の図形描画 (3).png
MCP3425 要求

これらが各種ビットによる性能。16ビットで電圧を測定すると12ビットに比べて16倍細かく計測することが可能となる。しかしSPSは1/16しか計測できない。

ビット数 1秒あたりの取得数 [SPS] 設定値 分解階調
12ビット 240 00 4,096
14ビット 60 01 16,384
16ビット 15 10 65,536

これらが各PGAゲイン。倍率を示す。

PGAゲイン 設定値 倍率 [倍]
1 V/V 00 1
2 V/V 01 2
4 V/V 10 4
8 V/V 11 8

3.2. – 読み込み設定

MCP3425からデータを読み出す必要がある。bus.read_i2c_block_dataにて読み出す。右は2バイト(=16ビット)でデータ格納を行っている。

data = bus.read_i2c_block_data(0x68, 0x00, 2)

これによって読み込みが行われる。次にビットをシフトして16Bitとして整形しなければならない。”bus.read_i2c_block_data”はdata[0]及びdata[1]に格納される。

raw = data[0] << 8 | data[1]

実際にdata[0]とdata[1]に何が格納されているか確認する必要がある。

AAAAAAAAAAAAAA.png
表示サンプル

data[0]とdata[1]を合わせた(OR = 論理和)のが562である。

無題の図形描画.png
data[0]とdata[1]の表示
表示は10進数で表示されているが、実際の作業は2進数で行われる。

無題の図形描画 (1).png
変換工程

ここでまた話が戻るが、ビット演算を使っている。”<< 8″は左に8つシフトを表している。詳しくは図解で。

raw = data[0] << 8 | data[1]
無題の図形描画 (1).png
ビットシフトの原理

data[0]を左に8動かす。その間には0が8入る。次にORによる演算を行う。次にdata[1]を導入する。

raw = data[0] << 8 | data[1]
無題の図形描画 (3).png
ビットシフトとORの原理

3.3. – 測定結果

測定結果は以下の通り。小さい電圧値も計測できることに加えて、マイナス値もしっかりと計測できることを確認した。

ccc1
測定結果 #1
ccc2
測定結果 #2

以上です。今後プログラムについては修正する場合があります。間違いがあったら教えてください!

以上

[Armbian]: How to Connect Orange Pi Zero to WiFi

Raspberry Pi Zero has no WiFi function. However, Orange Pi Zero has WiFi function. You cannot use the WiFi function simply by installing Armbian on Orange Pi Zero.

Here, we describe a method for connecting Orange Pi Zero with Armbian installed to WiFi.

1. Setting “wpa_supplicant.conf”

Introduction it’s necessary to set basic information for connecting to WiFi. Please prepare your WiFi SSID and Password. Write the setting information using an arbitrary Editor. Please change the part of “[SSID]” and “[PASSWORD]”.

$ sudo sh -c "wpa_passphrase [SSID] [PASSWORD] >> /etc/wpa_supplicant/wpa_supplicant.conf"
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
 ssid="Your_SSID"
 #psk="Your_Password"
 psk=c174a8f925b06ba03ad00bfa0d91210c7f28f9071bac05c8530146eb59c1e250
}

2. Setting “interfaces”

After setting WiFi, proceed to the next. Edit “/etc/network/interfaces” using an arbitrary editor.

$ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
$ sudo reboot

 

Thank you.

Japanese Food : Cup Chocolate Chow Mein

Would you like Cup Chocolate Chow Mein? You can eat it in 3 minutes.

Cup Chocolate Chow Mein
The Other Side
Accessories

Blue is chocolate sauce, red is sauce, purple is chocolate cubes.

Noodles

Put Hot Water in the cup and leave it for 3 minutes. Then, draining hot water.

Mix Accessories

I ate this Cup Chocolate Chow Mein. This is a combination of sweet and salty. I will not recommend it.

Evaluation : 3.0/10.0

Apache2でのBasic認証で発生する500 Internal Server Error問題の解決法

あけましておめでとうございます。2017年第一回目の記事(あけおめ記事は自動のため除く)です。

#0:状況

筆者もBasic認証をVPN上(VPN上でなくても解決できる)でWordPressを運用しているサーバ上にBasic認証を施そうとしたところ500 Internal Server Error (内部サーバエラー)が発生しました。ちなみに使用しているApache サーバはRaspberry Pi – Raspbianです。

Error.png
500 Internal Server Error

書いてる内容は

500 Internal Server Error
サーバ内部でエラーもしくは、構成ミスが発生したため、要求が完了できませんでした。
サーバ管理者に連絡して、エラーが発生した時刻、エラー直前に実行した操作を報告してください。
このエラーの詳細については、サーバエラーログを確認してください。

エラーを引き起こしたのは他でもない管理者である筆者なのだった…。この時に気づけばよかったのだが、『サーバーエラーログ』を見ていればすんなりと解決しました。

筆者もネットでググりまくっても出てくるのは、文字コードによるもの、改行によるもの、ファイルネームが間違っているものと全部試してみても500が解決する様子はない…。

#1:これで解決

最初からエラーログを見ていれば簡単でした。ちなみにlogが保存されているところは、グループがadmなので最初からrootでログインしておきましょう。次の方法で確認します。

$ sudo su
# cat /var/log/apache2/error.log

エラーの内容はいかほどなものか…。

[Sun Jan 01 08:01:43.414406 2017] [core:alert] [pid 1345] [client 25.XXX.XXX.XXX:XXX] /var/www/.htaccess: Invalid command ‘AuthGroupFile’, perhaps misspelled or defined by a module not included in the server configuration, referer: http://25.XXX.XXX.XXX/

AuthGroupFileはどうやら存在しないコマンドということみたいです。viなりで.htaccessを編集してAuthGroupFileの行を削除します。ちなみにこのコマンドは、グループ指定などに使うコマンドですが、なくても問題ないらしい。しかし、問題はこれだけではないみたいです。

[Sun Jan 01 08:11:01.869283 2017] [core:alert] [pid 1321] [client 25.XXX.XXX.XXX:XXX] /var/www/html/.htaccess: AuthName takes one argument, the authentication realm (e.g. “Members Only”), referer: http://25.XXX.XXX.XXX/

AuthNameの構成が間違っているとのこと。ダブルコーテーションのみでくくれ!って言われた…。

#変更前
AuthName "Please enter your ID and password";
#変更後
AuthName "Please enter your ID and password"

これですべてのエラーが解消されて、無事にBasic認証が動作しました。

#2:参考 .htaccess

ここに.htaccessの設定を載せておきます。

set.png
WordPress.comではうまくcodeが実行できないので画像で…。

 

それではよいお年を。

以上

あけましておめでとうございます

あけましておめでとうございます!こんにちは、筆者です。2017年来ましたね。5.4万人がこのスカスカのサイトに来てくれました。

あけましておめでとうございます!

2017年から筆者も忙しくなりそうですが、『きのこタイム』は更新していくのでよろしくお願いします。あと個人的なことですが、ある期間すごく忙しかったので絶賛白髪が増殖中。こまった…。

以上

Easy Install Hamachi on Raspberry Pi (Automatic Startup)

For older versions, “lsb” and “lsb-core” were necessary. In this article, “lsb” and “lsb-core” is unnecessary and it is setup until automatic startup.

The version used in this article is 2.1.0.174-1.

$ wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.174-1_armhf.deb
$ sudo dpkg -i logmein-hamachi_2.1.0.174-1_armhf.deb

After installation please do the following to join Hamachi. The last “hamachi join” is unnecessary if you are using WEB approval, and you can participate by approving it on the WEB.

$ sudo hamachi login
$ sudo hamachi attach [Your Hamachi Email Address]
$ sudo hamachi set-nick [Whatever Nickname You Make]
$ sudo hamachi join [Network ID] [Password]

Finally reboot Raspberry Pi and check whether Hamachi will start automatically.

Raspberry PiとVPNで作るウェブオンラインストレージサーバ

画像や動画、文章などを簡単に保存するとなると昔ならHDDやポータブルHDDなどに保存していました。最近であれば、ウェブオンラインストレージを使えば簡単に画像や動画、文章を転送して、また共有することができます。代表的なサービスとしてはDropboxやGoogle Drive、OneDriveなどがあります。

今回はRaspberry Piを用いてVPN上で運用するウェブオンラインストレージサーバを構築します。使用するものはownCloudと呼ばれるものです。

#1:サーバのセットアップ

サーバのセットアップを行う。セットアップ済みの場合は、この項目を飛ばしても構いません。

今回使用するイメージはRaspbian Jessie Liteで、Raspbian Jessie With Pixelと同様です。

詳しいことはこちらの記事を参考にしてください。


Raspberry Piで実行するVPN上のWordPress

各種参考項目:

#1:Raspberry Piのセットアップ
#1-1:Raspberry Piに必要なイメージをダウンロード
#1-2:ダウンロードしたイメージをMicro SDに書き込む
#1-3:初期起動の設定

#2:VPNの導入
#2-1:Hamachiへの登録
#2-2:クライアントへダウンロード&インストール
#2-3:Raspberry PiをHamachi VPNに参加させる


#2:サーバに必要な条件を整える

Raspberry PiをウェブサーバとするにはApacheやPHPを導入する必要があります。これがなければ表示することが出来ません。

#2-1:Apache2を導入する

ApacheはHTMLを表示するためのものです。下記のコマンドより導入します。

$ sudo apt-get install apache2

先程ifconfigで調べた自身のIPアドレスをブラウザに入力すると次の表示がされます。

2016-12-24
It works!

#2-2:PHP5の導入

PHP5を導入する必要があります。下記のコマンドより導入します。

$ sudo aptitude install php5 php5-curl

#2-3:MySQLの導入

MySQLを導入します。途中でMySQLに設定するパスワードを聞かれますので、設定して下さい。ここでは例として”raspass”とします。二度聞かれるのでどちらも同じパスワードを入力して下さい。

$ sudo apt-get install mysql-server php5-mysql

#2-4:データベースの作成

実際に運用させるためのデータベースを作成します。今回は”ownCloud”というデータベースを作成します。因みにMySQLにログインするには例として”mysql -uroot -praspass”で入ることができます。詳しく説明すると”mysql -u[User Name] -p[Password]”となっています。今回はowncloudというデータベースを作成します。

$ mysql -uroot -praspass
mysql> CREATE DATABASE owncloud;
mysql> exit

#2-5:phpMyAdminの導入

phpMyAdminを導入します。こちらも途中パスワードを聞かれますので問題なければ先程と同じパスワードを使います。嫌だと思う場合は、phpMyAdminで聞かれるパスワードのみを変え、2度目に同じものを入力して下さい。

$ sudo apt-get install phpmyadmin

#3:ownCloudの導入

今回使うオンラインストレージはownCloudを使用します。最新パッケージはこちらをご覧ください。

#3-1:ownCloudをダウンロードする。

$ wget https://download.owncloud.org/community/owncloud-9.1.3.zip
$ unzip owncloud-9.1.3.zip

#3-2:Apache上に配置する

Apache上でWordPressを再現する必要があるため、移動します。

$ sudo cp -r owncloud /var/www/html/owncloud

#3-3:権限問題の解決

どうしても生じるのが権限問題です。www-dataに権限を移譲し、設定を執り行います。

$ sudo chown -R www-data:www-data /var/www/html/owncloud

#4:ownCloudの設定

いよいよownCloudの設定に移ります。

#4-1:アカウント作成

『http://[Hamachi IP Address]/owncloud/』にアクセスしてみましょう。お好みのユーザ名とパスワードを作成します。

Own1.png
アカウントの作成

データベースに接続します。データベースのユーザ名、データベースのパスワード、先ほど作成したデータベース名を入力します。

Own2.png
データベースへのログイン

#4-2:実行してみた

Own3.png
アップロードしてブラウザ上で表示

以上

How to Acquire CPU Temperature and CPU Frequency Using PHP

This article is in English. Sometimes the sentences are wrong. Please be understanding of this beforehand.

How to Acquire the CPU Temperature Using PHP

The temperature displayed is celsius.

echo round((exec('cat /sys/class/thermal/thermal_zone0/temp')/1000),2);

How to Acquire the CPU Frequency Using PHP

The unit displayed is MHz. If there are 4 cores, cpu0 to cpu3.

echo round((exec('cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq')/1000),2);

Operation Example

Raspberry Pi is used for the server. By introducing “Insert PHP” in WordPress you can run PHP with widget.

00_raspi-config_l
Using “Insert PHP”.
00_900mhz
Add Completed.

Change the frequency and check the operation.

00_raspi-config
raspi-config
00_raspi-config_1ghz
Changed from 900MHz to 1000Mhz

00_1000mhz