Difference between revisions of "Matrix - Pressure and Temperature Sensor"
(→介绍) |
(→Update Log) |
||
(18 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
* The BMP180 consists of a piezo-resistive sensor, an analog to digital converter and a control unit with E2PROM and a serial I2C interface. The E2PROM has stored 176 bit of individual calibration data. This is used to compensate offset, temperature dependence and other parameters of the sensor. | * The BMP180 consists of a piezo-resistive sensor, an analog to digital converter and a control unit with E2PROM and a serial I2C interface. The E2PROM has stored 176 bit of individual calibration data. This is used to compensate offset, temperature dependence and other parameters of the sensor. | ||
− | == | + | ==Features== |
* I2C,3.3V | * I2C,3.3V | ||
− | * | + | * Pressure data(16 to 19 bit) |
− | * | + | * Temperature data(16 bit) |
* PCB Dimension(mm): 16 x 16 | * PCB Dimension(mm): 16 x 16 | ||
[[File:Matrix-Pressure_and_Temperature_Sensor_PCB.png|frameless|400px|]] | [[File:Matrix-Pressure_and_Temperature_Sensor_PCB.png|frameless|400px|]] | ||
− | * | + | * Pin Description: |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | | | + | |Pin || Description |
|- | |- | ||
|SDA || I2C SDA | |SDA || I2C SDA | ||
Line 24: | Line 24: | ||
|SCL || I2C SCL | |SCL || I2C SCL | ||
|- | |- | ||
− | |5V || | + | |5V || Supply Voltage 5V |
|- | |- | ||
− | |GND || | + | |GND || Ground |
|} | |} | ||
− | == | + | ==Basic Device Operation== |
− | * | + | * The mode (ultra low power, standard, high, ultra high resolution) can be selected by the variable oversampling_setting (0, 1, 2, 3) in the C code. |
− | * | + | * Calculation of true temperature and pressure in steps of 1Pa (= 0.01hPa = 0.01mbar) and temperature in steps of 0.1°C. |
− | * | + | * With the measured pressure p and the pressure at sea level p0 e.g. 1013.25hPa, the altitude in meters can be calculated with the international barometric formula: [[File:Matrix-Pressure_and_Temperature_Sensor_Calculat.png|frameless|400px|]] |
− | [[File:Matrix-Pressure_and_Temperature_Sensor_Calculat.png|frameless|400px|]] | + | * With the measured pressure p and the absolute altitude the pressure at sea level can be calculated: |
− | * | + | |
[[File:Matrix-Pressure_and_Temperature_Sensor_Calculat01.png|frameless|400px|]] | [[File:Matrix-Pressure_and_Temperature_Sensor_Calculat01.png|frameless|400px|]] | ||
− | + | Thus, a difference in altitude of ∆altitude = 10m corresponds to 1.2hPa pressure change at sea level. | |
− | == | + | ==Applications== |
− | + | ===Connect to NanoPi M1=== | |
− | + | Refer to the following connection diagram to connect the module to the NanoPi M1:<br> | |
− | + | [[File:Matrix-Pressure_and_Temperature_Sensor_nanopi_m1.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi_m1]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | Connection Details: | |
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Pressure_and_Temperature_Sensor || NanoPi M1 | ||
+ | |- | ||
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPi 2=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPi 2:<br> | ||
+ | [[File:Matrix-Pressure_and_Temperature_Sensor_nanopi_2.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi_2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Pressure_and_Temperature_Sensor || NanoPi 2 | ||
+ | |- | ||
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPi M2 / NanoPi 2 Fire=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:<br> | ||
+ | [[File:Matrix-Pressure_and_Temperature_Sensor_nanopi_M2.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi_M2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | || NanoPi M2 | ||
+ | |- | ||
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPC-T2=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPC-T2:<br> | ||
+ | [[File:Matrix-Pressure_and_Temperature_Sensor_NanoPC-T2.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_NanoPC-T2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Pressure_and_Temperature_Sensor || NanoPC-T2 | ||
+ | |- | ||
+ | |SDA || Pin6 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin29 | ||
+ | |- | ||
+ | |GND || Pin30 | ||
+ | |} | ||
+ | |||
+ | ==Compile & Run Test Program== | ||
+ | Boot your ARM board with Debian and copy the matrix code: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ apt-get update && apt-get install git | ||
+ | $ git clone https://github.com/friendlyarm/matrix.git | ||
+ | </syntaxhighlight> | ||
+ | If your cloning is done successfully a "matrix" directory will be generated. | ||
+ | |||
+ | Compile and install Matrix: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd matrix | ||
+ | $ make && make install | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Run test program: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ matrix-pressure_temp | ||
+ | </syntaxhighlight> | ||
+ | Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.<br> | ||
+ | Here is what you should observe:<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | The temperature is 26.6 C | ||
+ | The pressure is 983.91 hPa | ||
+ | The altitude is 247.18 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Code Sample== | ||
+ | This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-pressure_and_temperature_sensor". Here is its source code: | ||
+ | <syntaxhighlight lang="c"> | ||
+ | int main(int argc, char ** argv) | ||
+ | { | ||
+ | int ret = -1; | ||
+ | int bmpTemp=0, bmpPressure=0; | ||
+ | int board; | ||
+ | float altitude = 0; | ||
+ | |||
+ | if ((board = boardInit()) < 0) { | ||
+ | printf("Fail to init board\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | system("modprobe "DRIVER_MODULE); | ||
+ | if ((ret = bmp180Read(BMP180_TEMP, &bmpTemp)) != -1) { | ||
+ | printf("The temperature is %.1f C\n", (float)bmpTemp / 10); | ||
+ | } else { | ||
+ | printf("Faided to get humidity\n"); | ||
+ | } | ||
+ | if ((ret = bmp180Read(BMP180_PRESSURE, &bmpPressure)) != -1) { | ||
+ | printf("The pressure is %.2f hPa\n", (float)bmpPressure / 100); | ||
+ | } else { | ||
+ | printf("Faided to get pressure\n"); | ||
+ | } | ||
+ | |||
+ | altitude = 44330 * ( 1 - pow( ((float)bmpPressure / 100 / 1013.25), (1/5.255) ) ); | ||
+ | printf("The altitude is %.2f m\n", altitude); | ||
+ | system("rmmod "DRIVER_MODULE); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | For more details about this APIs called in this code sample refer to [[Matrix API reference manual]] <br> | ||
+ | <!--- | ||
+ | ==Download Matrix Source Code== | ||
+ | All the matrix modules' code samples are open source. They are maintained on GitHub - https://github.com/friendlyarm/matrix.git <br> | ||
+ | Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br> | ||
+ | * The nanopi branch contains the matrix modules' code samples for the NanoPi | ||
+ | * The nanopi 2 branch contains the matrix modules' code samples for the NanoPi 2 | ||
+ | * The tiny4412 branch contains the matrix modules' code samples for the Tiny4412 | ||
+ | * The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi | ||
+ | |||
+ | Please follow the steps below to get the source code:<br> | ||
+ | Install the git utility on a PC running Ubuntu14.04 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ sudo apt-get install git | $ sudo apt-get install git | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Clone the matrix code from GitHub | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ git clone https://github.com/friendlyarm/matrix.git | $ git clone https://github.com/friendlyarm/matrix.git | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples. | |
− | == | + | ==Connect to NanoPi 2== |
− | === | + | ===Hardware Connection=== |
− | + | Please refer to the following connection diagram to connect the Matrix-Pressure_and_Temperature_Sensor to the NanoPi 2:<br> | |
[[File:Matrix-Pressure_and_Temperature_Sensor_nanopi_2.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi_2]] | [[File:Matrix-Pressure_and_Temperature_Sensor_nanopi_2.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi_2]] | ||
− | + | Connection Details: | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 76: | Line 210: | ||
|} | |} | ||
− | === | + | ===Compile Test Program=== |
− | + | Please login the matrix hub and enter the nanopi2 branch | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd matrix | $ cd matrix | ||
Line 83: | Line 217: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Compile the matrix code | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ make CROSS_COMPILE=arm-linux- clean | $ make CROSS_COMPILE=arm-linux- clean | ||
Line 89: | Line 223: | ||
$ make CROSS_COMPILE=arm-linux- install | $ make CROSS_COMPILE=arm-linux- install | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Note: please make sure to install the cross compiler "arm-linux-gcc-4.9.3" on your PC, which is used to compile files for the NanoPi 2.<br> | |
− | + | Generated library files are under the "install/lib" directory. The test program is under the "install/usr/bin" directory.<br> | |
− | + | The modules are under the "modules" directory. The driver's source code is in github: https://github.com/friendlyarm/linux-3.4.y.git <br> | |
− | === | + | ===Run Test Program=== |
− | + | Please insert a TF card which is flashed with Debian to a Linux host and mount its boot and rootfs sections.<br> | |
− | + | We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy the module, library and test program to the card.<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cp modules /media/rootfs/ -r | $ cp modules /media/rootfs/ -r | ||
Line 102: | Line 236: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Insert this TF card to your NanoPi 2, power on and run the following command to load the driver<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd /modules | $ cd /modules | ||
Line 108: | Line 242: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Start the matrix-pressure_temp program<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ matrix-pressure_temp | $ matrix-pressure_temp | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Note: this module is not plug and play therefore before running the module please make sure it is connected to a NanoPi 2.<br> | |
− | + | Here is what you expect to observe:<br> | |
[[File:matrix-pressure_temp_result.png|frameless|600px|matrix-pressure_temp_result]] | [[File:matrix-pressure_temp_result.png|frameless|600px|matrix-pressure_temp_result]] | ||
− | === | + | ===Code Sample=== |
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
int main(int argc, char ** argv) | int main(int argc, char ** argv) | ||
Line 143: | Line 277: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==Connect to NanoPi== |
− | === | + | ===Preparations=== |
− | + | Please install a Debian on a NanoPi and an appropriate cross compiler on a PC. Please refer to wiki: [NanoPi] & [How to Build the Compiling Environment].<br> | |
− | + | Note: please use the kernel's source code from the nanopi-v4.1.y-matrix branch.<br> | |
− | + | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ git clone https://github.com/friendlyarm/linux-4.x.y.git | $ git clone https://github.com/friendlyarm/linux-4.x.y.git | ||
Line 156: | Line 289: | ||
$ make | $ make | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | After it is done a zImage will be generated under arch/arm/boot/. You can use it to replace the existing file under sd-fuse_nanopi/prebuilt. | |
− | === | + | ===Hardware Connection=== |
− | + | Please refer to the following connection diagram to connect the Matrix-Pressure_and_Temperature_Sensor to the NanoPi:<br> | |
[[File:Matrix-Pressure_and_Temperature_Sensor_nanopi.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi]] | [[File:Matrix-Pressure_and_Temperature_Sensor_nanopi.jpg|frameless|600px|Matrix-Pressure_and_Temperature_Sensor_nanopi]] | ||
− | + | Connection Details: | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 176: | Line 309: | ||
|} | |} | ||
− | === | + | ===Compile Test Program=== |
− | + | Please login the matrix hub and enter the nanopi branch | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd matrix | $ cd matrix | ||
Line 183: | Line 316: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Compile the matrix code | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ make CROSS_COMPILE=arm-linux- clean | $ make CROSS_COMPILE=arm-linux- clean | ||
Line 189: | Line 322: | ||
$ make CROSS_COMPILE=arm-linux- install | $ make CROSS_COMPILE=arm-linux- install | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Note: please make sure to install the cross compiler "arm-linux-gcc-4.4.3" on your PC, which is used to compile files for the NanoPi-Debian.<br> | |
− | + | Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Pressure_and_Temperature_Sensor" module is "matrix-pressure_temp".<br> | |
− | === | + | ===Run Test Program=== |
− | + | Please insert a TF card which is flashed with Debian to a Linux host and mount its boot and rootfs sections.<br> | |
− | + | We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy the module, library and test program to the card.<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cp modules /media/rootfs/ -r | $ cp modules /media/rootfs/ -r | ||
Line 201: | Line 334: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Insert this TF card to your NanoPi, power on and run the following command to load the driver<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd /modules | $ cd /modules | ||
Line 207: | Line 340: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Start the matrix-pressure_temp program.<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ matrix-pressure_temp | $ matrix-pressure_temp | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Note: this module is not plug and play therefore before running the module please make sure it is connected to a NanoPi.<br> | |
− | === | + | |
+ | ===Code Sample=== | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
int main(int argc, char ** argv) | int main(int argc, char ** argv) | ||
Line 239: | Line 373: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==Connect to Tiny4412== |
− | == | + | ==Connect to RaspberryPi== |
− | == | + | ==Connect to Arduino== |
+ | ---> | ||
− | == | + | ==Resources== |
[https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-12~1.pdf BMP180.pdf] | [https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-12~1.pdf BMP180.pdf] | ||
Line 251: | Line 386: | ||
===Feb-24-2016=== | ===Feb-24-2016=== | ||
* Added the whole English version | * Added the whole English version | ||
+ | |||
+ | ===Feb-26-2016=== | ||
+ | * Translated into English | ||
+ | |||
+ | ===June-23-2016=== | ||
+ | * Re-organized and simplified wiki |
Latest revision as of 14:47, 23 June 2016
Contents
1 Introduction
- The BMP180 is a high precision, ultra-low power small digital pressure sensor for consumer applications in mobile phones, PDAs, GPS navigation devices and outdoor equipments. With a low altitude noise of merely 0.25m at fast conversion time, the BMP180 offers superior performance. The I2C interface allows for easy system integration with a microcontroller.
- The BMP180 is based on piezo-resistive technology for EMC robustness, high accuracy and linearity as well as long term stability.
- The BMP180 consists of a piezo-resistive sensor, an analog to digital converter and a control unit with E2PROM and a serial I2C interface. The E2PROM has stored 176 bit of individual calibration data. This is used to compensate offset, temperature dependence and other parameters of the sensor.
2 Features
- I2C,3.3V
- Pressure data(16 to 19 bit)
- Temperature data(16 bit)
- PCB Dimension(mm): 16 x 16
- Pin Description:
Pin | Description |
SDA | I2C SDA |
SCL | I2C SCL |
5V | Supply Voltage 5V |
GND | Ground |
3 Basic Device Operation
- The mode (ultra low power, standard, high, ultra high resolution) can be selected by the variable oversampling_setting (0, 1, 2, 3) in the C code.
- Calculation of true temperature and pressure in steps of 1Pa (= 0.01hPa = 0.01mbar) and temperature in steps of 0.1°C.
- With the measured pressure p and the pressure at sea level p0 e.g. 1013.25hPa, the altitude in meters can be calculated with the international barometric formula:
- With the measured pressure p and the absolute altitude the pressure at sea level can be calculated:
Thus, a difference in altitude of ∆altitude = 10m corresponds to 1.2hPa pressure change at sea level.
4 Applications
4.1 Connect to NanoPi M1
Refer to the following connection diagram to connect the module to the NanoPi M1:
Connection Details:
Matrix-Pressure_and_Temperature_Sensor | NanoPi M1 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.2 Connect to NanoPi 2
Refer to the following connection diagram to connect the module to the NanoPi 2:
Connection Details:
Matrix-Pressure_and_Temperature_Sensor | NanoPi 2 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.3 Connect to NanoPi M2 / NanoPi 2 Fire
Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:
Connection Details:
NanoPi M2 | |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.4 Connect to NanoPC-T2
Refer to the following connection diagram to connect the module to the NanoPC-T2:
Matrix-Pressure_and_Temperature_Sensor_NanoPC-T2
Connection Details:
Matrix-Pressure_and_Temperature_Sensor | NanoPC-T2 |
SDA | Pin6 |
SCL | Pin5 |
5V | Pin29 |
GND | Pin30 |
5 Compile & Run Test Program
Boot your ARM board with Debian and copy the matrix code:
$ apt-get update && apt-get install git $ git clone https://github.com/friendlyarm/matrix.git
If your cloning is done successfully a "matrix" directory will be generated.
Compile and install Matrix:
$ cd matrix $ make && make install
Run test program:
$ matrix-pressure_temp
Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:
The temperature is 26.6 C The pressure is 983.91 hPa The altitude is 247.18
6 Code Sample
This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-pressure_and_temperature_sensor". Here is its source code:
int main(int argc, char ** argv) { int ret = -1; int bmpTemp=0, bmpPressure=0; int board; float altitude = 0; if ((board = boardInit()) < 0) { printf("Fail to init board\n"); return -1; } system("modprobe "DRIVER_MODULE); if ((ret = bmp180Read(BMP180_TEMP, &bmpTemp)) != -1) { printf("The temperature is %.1f C\n", (float)bmpTemp / 10); } else { printf("Faided to get humidity\n"); } if ((ret = bmp180Read(BMP180_PRESSURE, &bmpPressure)) != -1) { printf("The pressure is %.2f hPa\n", (float)bmpPressure / 100); } else { printf("Faided to get pressure\n"); } altitude = 44330 * ( 1 - pow( ((float)bmpPressure / 100 / 1013.25), (1/5.255) ) ); printf("The altitude is %.2f m\n", altitude); system("rmmod "DRIVER_MODULE); return 0; }
For more details about this APIs called in this code sample refer to Matrix API reference manual
7 Resources
8 Update Log
8.1 Feb-24-2016
- Added the whole English version
8.2 Feb-26-2016
- Translated into English
8.3 June-23-2016
- Re-organized and simplified wiki