本帖最后由 wdluo 于 2015-3-28 13:14 编辑
背景:树莓派的优势什么的就不多说了,这个也不一定实用,不过有时候也比较实用,看自己的应用吧,整个功能实现完全采用C语言编程,主要涉及的知识有I2C总线,网络编程,machtalk数据上传。
主要功能介绍:
1,通过调用I2C驱动程序读取BMP180传感器所测值(环境气压,环境温度,海拔高度(根据气压计算));
2,调用底层驱动读取CPU核心温度值;
3,本来打算读取光照度传感器和温湿度传感器测量环境光照度和湿度,但是发现树莓派I2C的驱动没法驱动这两个传感器,主要是树莓派I2C底层驱动设计上的问题,大家有兴趣再做探讨,这里就不多说了;
4,将所测值POST到machtalk网站(类似于yeelink)上去,当然你得提前在machtalk上建立一个设备;
主函数很简单,如下所示:
- int main (void)
- {
- double Temperature[11];
- double Pressure[11];
- double Altitude[11];
- double CPU_Temperature;
- int i=0,j;
- int PostNum=0;
- bmp180_init();
- while (1)
- {
- Temperature[i] = bmp180_get_temperature(bmp180_get_ut())/10.0;
- Pressure[i] = bmp180_get_pressure(bmp180_get_up())/1000.0;
- Altitude[i] = (44330.0 * (1.0-pow(Pressure[i]*1000 / 101325.0, 1.0/5.255)));//Altitude
- i++;
- if(i >= 10){
- i = 0;
- Temperature[10] = 0;
- Pressure[10] = 0;
- Altitude[10] = 0;
- for(j=0;j<10;j++){
- Temperature[10] += Temperature[j];
- Pressure[10] += Pressure[j];
- Altitude[10] += Altitude[j];
- }
- //post data
- printf("Start Post...\n\r");
- machtalk_post("c16ba32697d84b2ebc400f825376ac92","1","1",Pressure[10]/10.0,3);
- delay(1500);
- machtalk_post("c16ba32697d84b2ebc400f825376ac92","2","1",Altitude[10]/10.0,3);
- delay(1500);
- machtalk_post("c16ba32697d84b2ebc400f825376ac92","3","1",Temperature[10]/10.0,3);
- delay(1500);
- get_cpu_temperature(&CPU_Temperature);
- machtalk_post("c16ba32697d84b2ebc400f825376ac92","6","1",CPU_Temperature,3);
- printf("Post End Num : %d\n\r",++PostNum);
- }
- delay(1000);
- }
- return 0;
- }
复制代码 程序运行效果截图:
程序源码下载:
BMP180.zip
(14.4 KB, 下载次数: 130)
|