忍者ブログ
[17]  [18]  [19]  [20]  [21]  [22]  [23]  [24]  [25]  [26]  [27
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ノートPCを外部ディスプレイに接続してWindows10を使っているが
Creators Update後に外部ディスプレイの解像度が変更できない現象が
発生、解像度設定が選択できない、、

結論としては、可能であり

ディスプレイ設定で画面2,1と大きなアイコンが表示されているが
この大きなアイコン(外部の時は2)を押すと解像度が
設定できる。

相変わらずのMSのupdateは意味がわからん


拍手

PR
・RaspberypiでガーデンIot その6 計測を自動実行 cronを仕様 2017/08

・cronはすでに含まれているのでcrontabを記載すれば自動実行

1.書式は
crontab -l 内容表示
crontab -e ファイル編集
crontab -r ファイル削除

2.コマンド
* * * * * 分  時 日 月 曜日
   0-59 0-23 1-31 1-12 0-7 日-日

0-59 * * * * 毎分実行
*/5 * * * * 5分間隔で実行
0 * * * * 毎時00分に実行
*0,3,6 * * * 0,3,6時に実行
0 0 1 * * 毎月1日の0時0分に実行

3.コマンドは一般権限なので注意

3.編集
nanoで編集 CTRL+Oで上書き CTRL+Xで終了

4.今回の設定
0 * * * * python3 /home/pi/senseronce.py

毎時実行を確認

拍手

・RaspberypiでガーデンIot その3 web環境の生成 cgiserver


・cgiserver.py
import http.server
import sys
try:
  server_address = ("", 8000)
  handler_class = http.server.CGIHTTPRequestHandler #1 ハンドラを設定
  server = http.server.HTTPServer(server_address, handler_class)
  server.serve_forever()
except KeyboardInterrupt:
  sys.exit()  

・cgiserverの起動
sudo pyhton3 -m cgiserver.py

・cgiディレクトの作成 (cgiserverの規定値)
 /home/piの下にcgi-binを作成する

・sencer.htmlの作成

<html>
<head>
<title>Python3 CGI test1</title>
</head>
<body>
<h1>Python3 CGI sencer</h1><hr><p>
<form name = "Form1" method="POST" action="/cgi-bin/sencerdsp.py">
ymd: <input type="text" size=30 name="ymd"><p>
<input type="submit" value="送信" name="button1"><p>
</form>
</body>
</html>

・起動は
 http://localhost:8000/sencer.html
   ipアドレスでも可能



拍手

・RaspberypiでガーデンIot その2 センサーデータ収集 MCP3208
 CSVでデータ出力

sencer.py

import spidev
import time
import csv
import datetime
import smbus #bme280
#bme280
bus_number  = 1
i2c_address = 0x76
bus = smbus.SMBus(bus_number)
digT = []
digP = []
digH = []
t_fine = 0.0
#bme280
#spi
#spiのオープンとspiバスの指定
spi= spidev.SpiDev()
spi.open(0,0)
#csv
filena='data.csv'
#spi mco3208
#12ビットでデータを指定チャネルから読み込み
def  adc_read12(ch):
    r = spi.xfer2([4|2|(ch >> 2), (ch & 3 ) << 6,0])
    v=((r[1] & 0xF) << 8 ) + r[2]
    return v

#spi 電圧に変換3.3v
def conv_volts(data,places):
    volts = (data *3.3)/float(4096)
    volts=round(volts,places)
    return volts

#spi電圧に変換5v
def conv_volts5(data,places):
    volts = (data *5.0)/float(4096)
    volts=round(volts,places)
    return volts

#spi LM35用 電圧を温度に
def conv_temp(volts,places):
    temp =  volts * 100 
    temp  =round(temp,places)
    return temp
#spi
#i2c モードの書き込み
def writeReg_bme280(reg_address, data):
bus.write_byte_data(i2c_address,reg_address,data)

#bme280 初期設定
def get_calib_param_bme280():
calib = []
for i in range (0x88,0x88+24):
calib.append(bus.read_byte_data(i2c_address,i))
calib.append(bus.read_byte_data(i2c_address,0xA1))
for i in range (0xE1,0xE1+7):
calib.append(bus.read_byte_data(i2c_address,i))
digT.append((calib[1] << 8) | calib[0])
digT.append((calib[3] << 8) | calib[2])
digT.append((calib[5] << 8) | calib[4])
digP.append((calib[7] << 8) | calib[6])
digP.append((calib[9] << 8) | calib[8])
digP.append((calib[11]<< 8) | calib[10])
digP.append((calib[13]<< 8) | calib[12])
digP.append((calib[15]<< 8) | calib[14])
digP.append((calib[17]<< 8) | calib[16])
digP.append((calib[19]<< 8) | calib[18])
digP.append((calib[21]<< 8) | calib[20])
digP.append((calib[23]<< 8) | calib[22])
digH.append( calib[24] )
digH.append((calib[26]<< 8) | calib[25])
digH.append( calib[27] )
digH.append((calib[28]<< 4) | (0x0F & calib[29]))
digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F))
digH.append( calib[31] )
for i in range(1,2):
if digT[i] & 0x8000:
digT[i] = (-digT[i] ^ 0xFFFF) + 1
for i in range(1,8):
if digP[i] & 0x8000:
digP[i] = (-digP[i] ^ 0xFFFF) + 1
for i in range(0,6):
if digH[i] & 0x8000:
digH[i] = (-digH[i] ^ 0xFFFF) + 1  

#データの読み込み
def readData_bme280():
data = []
for i in range (0xF7, 0xF7+8):
data.append(bus.read_byte_data(i2c_address,i))
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
hum_raw  = (data[6] << 8)  |  data[7]
return(temp_raw,pres_raw,hum_raw)
#compensate_bme280_T(temp_raw)
#compensate_bme280_P(pres_raw)
#compensate_bme280_H(hum_raw)

def compensate_bme280_P(adc_P):
global  t_fine
pressure = 0.0
v1 = (t_fine / 2.0) - 64000.0
v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5]
v2 = v2 + ((v1 * digP[4]) * 2.0)
v2 = (v2 / 4.0) + (digP[3] * 65536.0)
v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8)  + ((digP[1] * v1) / 2.0)) / 262144
v1 = ((32768 + v1) * digP[0]) / 32768
if v1 == 0:
return 0
pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125
if pressure < 0x80000000:
pressure = (pressure * 2.0) / v1
else:
pressure = (pressure / v1) * 2
v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096
v2 = ((pressure / 4.0) * digP[7]) / 8192.0
pressure = pressure + ((v1 + v2 + digP[6]) / 16.0)
return pressure
                #print ("pressure : %7.2f hPa" % (pressure/100))
def compensate_bme280_T(adc_T):
global t_fine
v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1]
v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2]
t_fine = v1 + v2
temperature = t_fine / 5120.0
return temperature
#print ("temp : %-6.2f " % (temperature)) 
def compensate_bme280_H(adc_H):
global t_fine
var_h = t_fine - 76800.0
if var_h != 0:
var_h = (adc_H - (digH[3] * 64.0 + digH[4]/16384.0 * var_h)) * (digH[1] / 65536.0 * (1.0 + digH[5] / 67108864.0 * var_h * (1.0 + digH[2] / 67108864.0 * var_h)))
else:
return 0
var_h = var_h * (1.0 - digH[0] * var_h / 524288.0)
if var_h > 100.0:
var_h = 100.0
elif var_h < 0.0:
var_h = 0.0
return var_h
#print ("hum : %6.2f " % (var_h))
def setup_bme280():
osrs_t = 1 #Temperature oversampling x 1
osrs_p = 1 #Pressure oversampling x 1
osrs_h = 1 #Humidity oversampling x 1
mode   = 3 #Normal mode
t_sb   = 5 #Tstandby 1000ms
filter = 0 #Filter off
spi3w_en = 0 #3-wire SPI Disable
ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode
config_reg    = (t_sb << 5) | (filter << 2) | spi3w_en
ctrl_hum_reg  = osrs_h
writeReg_bme280(0xF2,ctrl_hum_reg)
writeReg_bme280(0xF4,ctrl_meas_reg)
writeReg_bme280(0xF5,config_reg)
#exec
#
setup_bme280()
get_calib_param_bme280()
#bme280
while True:
    try:
        d=adc_read12(1)
        #print("adc 0 : {:8} ".format(d))
        v=conv_volts(d,4)
        #print("volts: {:8.2f}".format(v))
        t=conv_temp(v,4)
        print("temp1 : {:8.2f}".format(t))
        t1= t
        #print("------------------------")
        #time.sleep(1)
        d=adc_read12(2)
     #   print("adc 1: {:8} ".format(d))
        v=conv_volts(d,4)
      #  print("volts: {:8.2f}".format(v))
        t=conv_temp(v,4)
        print("temp2 : {:8.2f}".format(t))
        t2= t
        #print("------------------------")
        #time.sleep(1)
        
        d=adc_read12(0)
        print("light : {:8} ".format(d))
        v=conv_volts(d,4)
        #print("volts: {:8.2f}".format(v))
        l1= d
        #print("------------------------")
        #time.sleep(1)
        d=adc_read12(3)
        print("suibun: {:8} ".format(d))
        v=conv_volts5(d,4)
     #   print("volts: {:8.2f}".format(v))
        s1= d
        #print("------------------------")
        adc_T,adc_P,adc_H=readData_bme280()
        t280=compensate_bme280_T(adc_T)
        print ("temp : %-6.2f " % (t280))
        p280=compensate_bme280_P(adc_P)
        print ("pressure : %7.2f hPa" % (p280/100))
        h280=compensate_bme280_H(adc_H)
        print ("hum : %6.2f " % (h280))
        print("---------------------------")
        now=datetime.datetime.now()
        tstr = now.strftime('%Y/%m/%d-%H:%M:%S')
        list = [tstr,t1, t2, l1 ,s1,round(t280,2),round(p280/100,2),round(h280,2)]
        filena = now.strftime('%Y%m%d') + ".csv"
        f=open(filena,'a+')
        writer = csv.writer(f, lineterminator='\n')
        writer.writerow(list)
        f.close()
       #bme280
      
        time.sleep(5)
        
    except KeyboardInterrupt:
        break
spi.close()  

拍手

・RaspberypiでガーデンIot その1 2017/08現在

・仕様
 webで年月日を入力 >> webで時間ごとのCSVセンサー値を表示
 定時でセンサーからの信号をCSVで記録

・センサー
 温度  LM35(土中、土壌面)
 湿度  BME280(空中) 土壌センサー
 明るさ 光センサー CDS 10kで分流
 気圧  BME280

・ソフト
 web  python3 cgiserver
 html  python3 cgi python3
 センサ python3 

・センサーとraspberypiとの接続
  SPI MCP2308 LM3 土壌センサー 光センサー
  I2C BE280

・結果
 日付を入力
 


 時間ごとのセンス値を表示


 ・できなかった事
 CGI中でセンサー値収集を実行しようとしたが、
 センサー値収集等IO端子の実行sudoさんでないと実行できない
 CGIではsudo権限がない

 wiringpiで実行できるようだが2017/7現在raspberypi3とは
 相性が悪い

 よって単純にCSVデータでのやり取りで実行した

拍手

カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]