实现气象站

Subject是主题接口,Observer所有的气象组建都实现此接口,布告板也建立一个共同的接口,只要实现display()方法。

public interface Subject{
	public void registerObserver(Observer o);//这2个方法都需要观察者作为变量,这个观察者是用来注册和删除的。
	public void removeObserver(Observer o);
	public void notifyObserver();

}

Observer接口

public interface Observer{
	//当气象观测值改变时,主题会把这些状态值当作方法参数,传给观察者。
	public void update(float temp, float humidity, float pressure);
}


DisplayElement接口

public interface DisplayElement{
	//当布告板需要显示时调用此方法。
	public void display();
}


在WeatherData中实现主题接口:

public class WeatherData implements Subject{
	//ArrayList记录观察者
	private ArrayList observers;
	private float humidity;
	private float pressuer;
	
	//ArrayList是在构造器中建立的
	public void WeatherData(){
		observers = new ArrayList();
	}
	
	//注册为观察者时只要在ArrayList调用add()方法
	public void registerObserver(Observer o){
		observers.add();
	}

	//当观察者想取消时从ArrayList中取消
	public void removeObserver(Observer o){
		int i = observers.indexOf(o);
		if(i >= 0){
			observers.remove(i);
		}
	}

	//把状态告诉每一个观察者
	public void notifyObserver(){
		for(int i=0; i < observers.size(); i++){
			Observer observer = (Observer)observers.get(i);
			observer.update(temperature,humidity,pressure);
		}
	}

	//拿到数据通知观察者
	public void measurementsChanges(){
		notifyObserver();
	}

	public void setMeasurements(float temperture, float humidity, float pressure){
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementsChanged();
	}
}

建立布告板:

public class CurrentConditionsDisplay implements Oserver,DisplayElement{
	private float humidity;
	private float pressure;
	private Subject weatherData;

	//构造器需要weatherData作为注册用
	public CurrentConditionsDisplay(Subject weatherData){
		this.weatherData = weatherData;
		weatherData.registerObserver(this);		
	} 

	//当update()被调用时,把温度和湿度保存起来然后调用display();
	public void update(float temperture, float humidity, float pressure){
		this.temperture = temperture;
		this.humidity = humidity;
		display();
	}
	
	//display显示最近的参数
	public void display(){
		System.out.println("Currtent conditions:"+temperature+"F degrees and"+humidity+"% humidity");
	}
}


最后启动气象站:

public class WeatherStation{
	public static void main(String[] args){
		WeatherData weatherData = new WeatherData();
	
		//建立布告板并把weatherData对象穿给他们
		CurrentConditionsDisplay currentConditionsDisplay = new 

CurrentConditionsDisplay(weatherData);
		//模拟新气象
		weatherData.setMeasurements(80,65,30,4f);
		weatherData.setMeasurements(79,70,39,7f);
		weatherData.setMeasurements(77,90,25,8f);
	}
}





使用Arduino,ESP8266和ThingSpeak的IoT无线气象站。 硬件部件 乐鑫Wemos D1 Mini× 1个 DHT11温湿度传感器(4针) × 1个 Seeed Grove-气压计传感器(BMP280)× 1个 软件应用程序和在线服务 ThingSpeak API Arduino IDE 全球变暖导致了不可预测的气候;世界各地的研究人员正在使用气象站来观察记录并分析天气模式,以研究气候变化并提供天气预报。这些气象站通常由很少的传感器来测量环境参数,以及监测或测井系统来分析这些参数。在本教程中,我们将学习如何构建基于无线物联网的气象站,该气象站可以测量关键的环境参数,例如温度,湿度和压力。同样,由于我们的气象站已启用IoT,因此我们可以将这些参数发送到ThingSpeak通道(IoT云),在这里我们可以远程存储,分析和访问数据。较早使用Raspberry Pi的气象站,这与该项目非常相似。 我们将使用Arduino开发板以及DHT11传感器,BMP180传感器和ESP8266 wifi模块。DHT11传感器感应温度和湿度,而BMP180传感器计算压力,ESP8266用于互联网连接。在我们之前的项目中,我们已经学会了使用DHT11传感器通过Arduino监视温度和湿度,在此项目中,我们将添加另一个传感器(BMP180)以使用Arduino制作一个完整的气象站。将这些数据发送到ThingSpeak可以在世界任何地方进行实时监视,我们还可以查看记录的数据,这些数据将存储在他们的网站上,甚至可以随着时间的流逝绘制图表进行分析。 电路原理图 基于Arduino的IoT Weather Station的完整电路如下所示。 DHT11传感器由Arduino的5V引脚供电,其数据引脚连接到引脚5,以进行一条线通信。BMP180传感器由Arduino的3.3V引脚供电,其数据引脚SCL(串行时钟)和SDA(串行数据)连接至Arduino的A4和A5引脚以进行I2C通信。 ESP8266模块还由Arduino的3.3V引脚供电,其Tx和Rx引脚连接到Arduino的数字引脚2和3进行串行通信。您可以使用下表作为建立连接的参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值