728x90
반응형
dependencies
devices.js
// MQTT Server 연결
const { response } = require("express");
var express=require("express");
var router=express.Router();
const mqtt=require("mqtt");
const DHT11=require("../modules/dht11") //DHT11모듈 가져오기
const client=mqtt.connect("mqtt://210.223.239.164");
router.post("/led", function(req, res, next){
res.set("Content-Type", "text/json");
if(req.body.flag=="on"){
client.publish("led","1");
res.send(JSON.stringify({led:"on"}));
}else{
client.publish("led","2");
res.send(JSON.stringify({led:"off"}));
}
});
router.post("/device", function(req,res,next){
if(req.body.sensor=="dht11"){
DHT11.find({}).sort({create_at: -1}).limit(10)
.then(data=>{
res.send(JSON.stringify(data));
});
}else{
// 다른 센서 정보를 전달
}
});
module.exports = router // 다른데서도 쓸 수 있게
DHT11 , router.post("/device"
DHT11sensor.java
public class DHT11sensor extends StringRequest {
// node.js에 요청하는 URL
final static String URL = "http://210.223.239.164:3000/devices/device";
private Map<String, String> parameters;
public DHT11sensor(String sensor, Response.Listener<String> listener) {
super(Method.POST, URL, listener, null); // 요청되는 부분
// sensor=dht11 식으로 작성해야함
// sensor=mq2
parameters = new HashMap<String, String>();
parameters.put("sensor", sensor);
}
@Override
protected Map<String, String> getParams(){
return parameters;
}
}
LEDsensor.java
public class LEDsensor extends StringRequest {
// node.js에 요청하는 URL
final static String URL = "http://210.223.239.164:3000/devices/led";
private Map<String, String> parameters;
public LEDsensor(String led, Response.Listener<String> listener) {
super(Method.POST, URL, listener, null); // 요청되는 부분
// flag = on
// flag = off
parameters = new HashMap<String, String>();
parameters.put("flag", led);
}
@Override
protected Map<String, String> getParams() {
return parameters;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] sensors = {"dht11", "mq2"};
ArrayAdapter<String> spinnerAdapter =
new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, sensors); // 기본 제공 layout
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(spinnerAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int i, long id) { // i = position
// 다이얼로그
final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("센서 로그 정보 수신중;;;");
dialog.show();
// 2. 받는 방법 -> Listener(JSON)
Response.Listener<String> listener = new Response.Listener<String>() {
@Override
public void onResponse(String response) { // JSON으로 받는쪽 [{tmp,hum,create_at}, { }, { }....] <- JSONArray
dialog.dismiss(); // 받으면 다이얼로그 종료
try {
JSONArray array = new JSONArray(response);
items.clear(); // 실행할때 ArrayList clear하고 시작
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i); // {tmp,hum,create_at}
// (vo) Item(묶고) -> ArrayList(담고)
items.add(new Item(obj.getInt("tmp"), obj.getInt("hum"), obj.getString("create_at")));
}// for
// DATA -> Adapter(제공,커스텀) -> ListView에 연결
ItemAdapter adapter = new ItemAdapter(MainActivity.this);
ListView listView = findViewById(R.id.listview);
listView.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
}
}
};
// node.js 서버로 dth11 센서의 온도, 습도, 날짜 데이터를 요청
// 1. 요청하는 방법 -> API(Volley) : 별도의 클래스 - DHT11sensor
StringRequest dht11 = new DHT11sensor(sensors[i], listener);
dht11.setShouldCache(false); // cache 사용x (새롭게 데이터 요청)
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(dht11); // 실행
}
// 지우지말것
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}// onCreate
public void clickLedOnButton(View view){
Response.Listener<String> listener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
Toast.makeText(getApplicationContext(),"LED가 켜짐ㅋ"+obj.get("led"),
Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
}
}
};
StringRequest led = new LEDsensor("on", listener);
led.setShouldCache(false);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(led); //실행
}// clickLedOnButton
public void clickLedOffButton(View view){
Response.Listener<String> listener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
Toast.makeText(getApplicationContext(),"LED가 꺼짐ㅋ"+obj.get("led"),
Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
}
}
};
StringRequest led = new LEDsensor("off", listener);
led.setShouldCache(false);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(led); //실행
}//clickLedOffButton
class Item {
int temp, humidity;
String created_at;
Item(int temp, int humidity, String created_at) {
this.temp = temp;
this.humidity = humidity;
this.created_at = created_at;
}
}//Item
ArrayList<Item> items = new ArrayList<Item>();
// 커스텀뷰
class ItemAdapter extends ArrayAdapter {
public ItemAdapter(Context context) {
super(context, R.layout.list_sensor_item, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=convertView;
if(view==null){
LayoutInflater inflater=
(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
view=inflater.inflate(R.layout.list_sensor_item, null);
}
TextView tempText=view.findViewById(R.id.temp);
TextView humidityText=view.findViewById(R.id.humidity);
TextView createdAtText=view.findViewById(R.id.created_at);
tempText.setText("온도:"+items.get(position).temp);
humidityText.setText("습도:"+items.get(position).humidity);
createdAtText.setText("수집정보(날짜/시간)"+items.get(position).created_at);
return view;
}
}
}//class
반응형
'Spring' 카테고리의 다른 글
[Spring Boot/IntelliJ] SpringBoot 시작 (0) | 2022.04.13 |
---|---|
Spring - mysql 연동 환경설정 (0) | 2021.05.24 |
LBS 활용하기 (0) | 2021.04.30 |
카메라 사용 (0) | 2021.04.14 |
MONGO + MQTT로 브라우저LED제어 (0) | 2021.04.07 |