Skip to content

Instantly share code, notes, and snippets.

@kmizu
Created January 3, 2020 12:53
Show Gist options
  • Save kmizu/21ad08c98839df7bc6fe89432eb359a0 to your computer and use it in GitHub Desktop.
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
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 ");
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