Created
January 3, 2020 12:53
-
-
Save kmizu/21ad08c98839df7bc6fe89432eb359a0 to your computer and use it in GitHub Desktop.
An Onion program that use BME280, which is based on https://github.com/ControlEverythingCommunity/BME280/blob/master/Java/BME280.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
com.pi4j.io.i2c.I2CBus; | |
com.pi4j.io.i2c.I2Device; | |
com.pi4j.io.i2c.I2CFactory; | |
java.io.IOException; | |
} | |
def up(x: Byte): Int { | |
return x; | |
} | |
bus = I2CFactory::getInstance(I2CBus::BUS_1); | |
device = bus.getDevice(0X76); | |
b1 = new Byte[24]; | |
device.read(0x88, b1, 0, 24); | |
dig_T1 = (b1[0] & 0xFF) + ((b1[1] & 0xFF) * 256); | |
dig_T2 = (b1[2] & 0xFF) + ((b1[3] & 0xFF) * 256); | |
if(dig_T2 > 32767) { | |
dig_T2 = dig_T2 - 65536; | |
} | |
dig_T3 = (b1[4] & 0xFF) + ((b1[5] & 0xFF) * 256); | |
if(dig_T3 > 32767) { | |
dig_T3 = dig_T3 - 65536; | |
} | |
dig_P1 = (b1[6] & 0xFF) + ((b1[7] & 0xFF) * 256); | |
dig_P2 = (b1[8] & 0xFF) + ((b1[9] & 0xFF) * 256); | |
if(dig_P2 > 32767) { | |
dig_P2 = dig_P2 - 65536; | |
} | |
dig_P3 = (b1[10] & 0xFF) + ((b1[11] & 0xFF) * 256); | |
if(dig_P3 > 32767) { | |
dig_P3 = dig_P3 - 65536; | |
} | |
dig_P4 = (b1[12] & 0xFF) + ((b1[13] & 0xFF) * 256); | |
if(dig_P4 > 32767) { | |
dig_P4 = dig_P4 - 65536; | |
} | |
dig_P5 = (b1[14] & 0xFF) + ((b1[15] & 0xFF) * 256); | |
if(dig_P5 > 32767) { | |
dig_P5 = dig_P5 - 65536; | |
} | |
dig_P6 = (b1[16] & 0xFF) + ((b1[17] & 0xFF) * 256); | |
if(dig_P6 > 32767) { | |
dig_P6 = dig_P6 - 65536; | |
} | |
dig_P7 = (b1[18] & 0xFF) + ((b1[19] & 0xFF) * 256); | |
if(dig_P7 > 32767) { | |
dig_P7 = dig_P7 - 65536; | |
} | |
dig_P8 = (b1[20] & 0xFF) + ((b1[21] & 0xFF) * 256); | |
if(dig_P8 > 32767) { | |
dig_P8 = dig_P8 - 65536; | |
} | |
dig_P9 = (b1[22] & 0xFF) + ((b1[23] & 0xFF) * 256); | |
if(dig_P9 > 32767) { | |
dig_P9 = dig_P9 - 65536; | |
} | |
dig_H1: Int = (device.read(0xA1) & 0xFF)$Byte; | |
device.read(0xE1, b1, 0, 7); | |
dig_H2 = (b1[0] & 0xFF) + (b1[1] * 256); | |
if(dig_H2 > 32767) { | |
dig_H2 = dig_H2 - 65536; | |
} | |
dig_H3 = b1[2] & 0xFF; | |
dig_H4 = (b1[3] & 0xFF) * 16 + (b1[4] & 0xF); | |
if(dig_H4 > 32767) { | |
dig_H4 = dig_H4 - 65536; | |
} | |
dig_H5 = (b1[4] & 0xFF) / 16 + (b1[5] & 0xFF) * 16; | |
if(dig_H5 > 32767) { | |
dig_H5 = dig_H5 - 65536; | |
} | |
dig_H6 = b1[6] & 0xFF; | |
if(dig_H6 > 127) { | |
dig_H6 = dig_H6 - 256; | |
} | |
device.write(0xF2, 0x01$Byte); | |
device.write(0xF4 , 0x27$Byte); | |
device.write(0xF5 , 0xA0$Byte); | |
data = new Byte[8]; | |
device.read(0xF7, data, 0, 8); | |
adc_p: Long = (((data[0] & 0xFF)$Long * 65536) + ((data[1] & 0xFF)$Long * 256) + (data[2] & 0xF0)$Long) / 16; | |
adc_t: Long = (((data[3] & 0xFF)$Long * 65536) + ((data[4] & 0xFF)$Long * 256) + (data[5] & 0xF0)$Long) / 16; | |
adc_h: Long = ((data[6] & 0xFF)$Long * 256 + (data[7] & 0xFF)$Long); | |
var1: Double = (adc_t$Double / 16384.0 - dig_T1$Double / 1024.0) * dig_T2$Double; | |
var2: Double = (adc_t$Double / 131072.0 - dig_T1$Double / 8192.0) * | |
(adc_t$Double / 131072.0 - dig_T1$Double / 8192.0) * dig_T3$Double; | |
t_fine: Double = (var1 + var2)$Long; | |
cTemp: Double = (var1 + var2) / 5120.0; | |
fTemp: Double = cTemp * 1.8 + 32; | |
var1 = (t_fine / 2.0) - 64000.0; | |
var2 = var1 * var1 * dig_P6$Double / 32768.0; | |
var2 = var2 + var1 * dig_P5$Double * 2.0; | |
var2 = (var2 / 4.0) + (dig_P4$Double * 65536.0); | |
var1 = (dig_P3$Double * var1 * var1 / 524288.0 + dig_P2$Double * var1) / 524288.0; | |
var1 = (1.0 + var1 / 32768.0) * dig_P1$Double; | |
p: Double = 1048576.0 - adc_p$Double; | |
p = (p - (var2 / 4096.0)) * 6250.0 / var1; | |
var1 = dig_P9$Double * p * p / 2147483648.0; | |
var2 = p * dig_P8$Double / 32768.0; | |
pressure: Double = (p + (var1 + var2 + dig_P7$Double) / 16.0) / 100; | |
var_H: Double = t_fine$Double - 76800.0; | |
var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); | |
humidity: Double = var_H * (1.0 - dig_H1 * var_H / 524288.0); | |
if humidity > 100.0 { | |
humidity = 100.0; | |
} else { | |
if humidity < 0.0 { | |
humidity = 0.0; | |
} | |
} | |
System::out.println("Temperature in Celsius : " + cTemp + " C "); | |
System::out.println("Temperature in Fahrenheit : " + fTemp + " F "); | |
System::out.println("Pressure : " + pressure + " hPa"); | |
System::out.println("Relative Humidity : " + humidity + "% RH "); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pi@r4:~/work/bme $ ls | |
BME280.on onion.jar | |
pi@r4:~/work/bme $ java -jar onion.jar -classpath /opt/pi4j/lib/pi4j-core.jar:/opt/pi4j/lib/pi4j-device.jar:/opt/pi4j/lib/pi4j-gpio-extension.jar BME280.on | |
pi@r4:~/work/bme $ ls -l | |
合計 21452 | |
-rw-r--r-- 1 pi pi 3855 1月 3 21:48 BME280.on | |
-rw-r--r-- 1 pi pi 3104 1月 3 21:52 BME280Main.class | |
-rw-r--r-- 1 pi pi 21957844 1月 3 21:46 onion.jar | |
pi@r4:~/work/bme $ java -classpath /opt/pi4j/lib/pi4j-core.jar:/opt/pi4j/lib/pi4j-device.jar:/opt/pi4j/lib/pi4j-gpio-extension.jar:. BMEMain | |
エラー: メイン・クラスBMEMainが見つからなかったかロードできませんでした | |
pi@r4:~/work/bme $ java -classpath /opt/pi4j/lib/pi4j-core.jar:/opt/pi4j/lib/pi4j-device.jar:/opt/pi4j/lib/pi4j-gpio-extension.jar:. BME280Main | |
Temperature in Celsius : 21.07973462800146 C | |
Temperature in Fahrenheit : 69.94352233040263 F | |
Pressure : 1014.2536605353494 hPa | |
Relative Humidity : 32.96049074790535% RH |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment