---
# System prepended metadata

title: 村瀬ソース

---

ひかりん班
https://hackmd.io/t_ZHPH96RpeQwtUL5LiN_Q

# 村瀬ソース 
上に行くほど新しいソースです

#### ※注 ラズパイのusbポートは繋ぐ順番で名前が変わるので注意

## firestoreに移行したプログラム
```
from time import sleep
import serial
import firebase_admin
from firebase_admin import firestore
from firebase_admin import credentials

cred = credentials.Certificate("/home/pi/Desktop/my-first-project-7e725-firebase-adminsdk-cpqgy-61a391587a.json")
firebase_admin.initialize_app(cred)

db = firestore.client()

lsw_new="n"
p_flg=1
t_flg=1
l_flg=1

if(p_flg):
    arduino_ph=serial.Serial('/dev/ttyUSB0',9600)
if(t_flg):
    arduino_temp=serial.Serial('/dev/ttyUSB1',9600)
if(l_flg):
    arduino_led=serial.Serial('/dev/ttyUSB2',9600)

aquarium_ref=db.collection(u'aquarium')

while 1:
    #ph
    if(p_flg):
        ph_read=arduino_ph.readline()
        ph_utf8=ph_read.decode()
        ph_val=ph_utf8.strip()
        if(ph_val!='0' and ph_val!='1'):
            doc_ref = db.collection(u'aquarium').document(u'sensor_val')
            doc_ref.update({u'ph': ph_val})
        elif(ph_val=='0'):
            send_ph=b'0'
            arduino_led.write(send_ph)
        elif(ph_val=='1'):
            send_ph=b'1'
            arduino_led.write(send_ph)
    
    if(t_flg):
        temp_read=arduino_temp.readline()
        temp_utf8=temp_read.decode()
        temp_val=temp_utf8.strip()
        if(temp_val!='a' and temp_val!='b'):
            doc_ref = db.collection(u'aquarium').document(u'sensor_val')
            doc_ref.update({u'temp': temp_val})
        elif(temp_val=='a'):
            send_temp=b'a'
            arduino_led.write(send_temp)
        elif(temp_utf8=='b'):
            send_temp=b'b'
            arduino_led.write(send_temp)
        
    #led   
    if(l_flg):
        lsw_old=lsw_new
        doc_ref = db.collection(u'aquarium').document(u'led_sw')
        doc = doc_ref.get()
        lsw_new=doc.to_dict()['val']
        if(lsw_old!=lsw_new):
            if(lsw_new=='+'):
                send_led=b'+'
                arduino_led.write(send_led)
            if(lsw_new=='-'):
                send_led=b'-'
                arduino_led.write(send_led)
    sleep(1)
```

## スマホ(firebase)から+-を送るプログラム
```
from time import sleep
import serial
import pyrebase

 #// Your web app's Firebase configuration
 #// For Firebase JS SDK v7.20.0 and later, measurementId is optional
firebaseConfig = {
    "apiKey": "AIzaSyA-DfJFfWMYFH46MYg-TOdA9YtHOB75qTg",
    "authDomain": "my-first-project-7e725.firebaseapp.com",
    "projectId": "my-first-project-7e725",
    "storageBucket": "my-first-project-7e725.appspot.com",
    "messagingSenderId": "666881609941",
    "appId": "1:666881609941:web:b6bb69e6b22f71dbef525c",
    "measurementId": "G-EVNRCJEJD1",
    #下記村追加
    "databaseURL": "https://my-first-project-7e725-default-rtdb.firebaseio.com/"
};
  #// Initialize Firebase
  #firebase.initializeApp(firebaseConfig);
  #firebase.analytics();
  
firebase=pyrebase.initialize_app(firebaseConfig)
m_db=firebase.database()
lsw_new="n"

p_flg=1
t_flg=1
l_flg=1

if(p_flg):
    arduino_ph=serial.Serial('/dev/ttyUSB0',9600)
if(t_flg):
    arduino_temp=serial.Serial('/dev/ttyUSB1',9600)
#if(l_flg):
    #arduino_led=serial.Serial('/dev/ttyUSB2',9600)

while(1):
    #ph
    if(p_flg):
        ph_read=arduino_ph.readline()
        ph_utf8=ph_read.decode()
        ph_val=ph_utf8.strip()
        if(ph_val!='0' and ph_val!='1'):
            m_db.child("aquarium").update({"ph":ph_val})
        elif(ph_val=='0'):
            send_ph=b'0'
            #arduino_ph.write(send_ph)
            #arduino_led.write(send_ph)
        elif(ph_val=='1'):
            send_ph=b'1'
            #arduino_ph.write(send_ph)
            #arduino_led.write(send_ph)
    
    #temp
    if(t_flg):
        temp_read=arduino_temp.readline()
        temp_utf8=temp_read.decode()
        temp_val=temp_utf8.strip()
        if(temp_val!='a' and temp_val!='b'):
            m_db.child("aquarium").update({"temp":temp_val})
        elif(temp_val=='a'):
            send_temp=b'a'
            #arduino_temp.write(send_temp)
            #arduino_led.write(send_ph)
        elif(temp_val=='b'):
            send_temp=b'b'
            #arduino_temp.write(send_temp)
            #arduino_led.write(send_ph)
    
    #led     
    if(l_flg):
        lsw_old=lsw_new
        lsw_new=m_db.child("input/led_sw").get().val()
        if(lsw_old!=lsw_new):
            if(lsw_new=='+'):
                send_ph=b'+'
                arduino_ph.write(send_ph)
                #arduino_led.write(send_ph)
            if(lsw_new=='-'):
                send_ph=b'-'
                arduino_ph.write(send_ph)
                #arduino_led.write(send_ph)
```

## ラズパイからnano2台に温度とphの正常異常(0,1,a,b)を送るプログラム
```
from time import sleep
import serial
import pyrebase

arduino_ph=serial.Serial('/dev/ttyUSB0',9600)
arduino_temp=serial.Serial('/dev/ttyUSB1',9600)

 #// Your web app's Firebase configuration
 #// For Firebase JS SDK v7.20.0 and later, measurementId is optional
firebaseConfig = {
    "apiKey": "AIzaSyA-DfJFfWMYFH46MYg-TOdA9YtHOB75qTg",
    "authDomain": "my-first-project-7e725.firebaseapp.com",
    "projectId": "my-first-project-7e725",
    "storageBucket": "my-first-project-7e725.appspot.com",
    "messagingSenderId": "666881609941",
    "appId": "1:666881609941:web:b6bb69e6b22f71dbef525c",
    "measurementId": "G-EVNRCJEJD1",
    #以下村追記
    "databaseURL": "https://my-first-project-7e725-default-rtdb.firebaseio.com/"
};
  #// Initialize Firebase
  #firebase.initializeApp(firebaseConfig);
  #firebase.analytics();
  
firebase=pyrebase.initialize_app(firebaseConfig)
m_db=firebase.database()
while(1):
    
    #ph
    ph=arduino_ph.readline()
    ph_utf8=ph.decode()
    if(ph_utf8!="0\r\n" and ph_utf8!="1\r\n"):
        m_db.child("aquarium").update({"ph":ph_utf8})
    elif(ph_utf8=="0\r\n"):
        send_ph=b'0'
        arduino_ph.write(send_ph)
    elif(ph_utf8=="1\r\n"):
        send_ph=b'1'
        arduino_ph.write(send_ph)
    
    #temp
    temp=arduino_temp.readline()
    temp_utf8=temp.decode()
    if(temp_utf8!="a\r\n" and temp_utf8!="b\r\n"):
        m_db.child("aquarium").update({"temp":temp_utf8})
    elif(temp_utf8=="a\r\n"):
        send_temp=b'a'
        arduino_temp.write(send_temp)
    elif(temp_utf8=="b\r\n"):
        send_temp=b'b'
        arduino_temp.write(send_temp)
    
    sleep(1)
```



## nano2台から温度とphの正常異常(0,1,a,b)を受け取るプログラム
```
from time import sleep
import serial
import pyrebase

arduino_ph=serial.Serial('/dev/ttyUSB0',9600)
arduino_temp=serial.Serial('/dev/ttyUSB1',9600)

 #// Your web app's Firebase configuration
 #// For Firebase JS SDK v7.20.0 and later, measurementId is optional
firebaseConfig = {
    "apiKey": "AIzaSyA-DfJFfWMYFH46MYg-TOdA9YtHOB75qTg",
    "authDomain": "my-first-project-7e725.firebaseapp.com",
    "projectId": "my-first-project-7e725",
    "storageBucket": "my-first-project-7e725.appspot.com",
    "messagingSenderId": "666881609941",
    "appId": "1:666881609941:web:b6bb69e6b22f71dbef525c",
    "measurementId": "G-EVNRCJEJD1",
    #以下村追記
    "databaseURL": "https://my-first-project-7e725-default-rtdb.firebaseio.com/"
};
  #// Initialize Firebase
  #firebase.initializeApp(firebaseConfig);
  #firebase.analytics();
  
firebase=pyrebase.initialize_app(firebaseConfig)
m_db=firebase.database()
while(1):
    
    #ph
    ph=arduino_ph.readline()
    ph_utf8=ph.decode()
    if(ph!=str.encode("0\r\n") and ph!=str.encode("1\r\n")):
        m_db.child("aquarium").update({"ph":ph_utf8})
    elif(ph==str.encode("0\r\n")):
        print("0_ph")
        #arduino_ph.write(str.encode("0"))
    elif(ph==str.encode("1\r\n")):
        print("1_ph")
        #arduino_ph.write(str.encode("1"))
      
    #temp
    temp=arduino_temp.readline()
    temp_utf8=temp.decode()
    if(temp!=str.encode("a\r\n") and temp!=str.encode("b\r\n")):
        m_db.child("aquarium").update({"temp":temp_utf8})
    elif(temp==str.encode("a\r\n")):
        print("a_temp")
        arduino_temp.write(str.encode("a"))
    elif(temp==str.encode("b\r\n")):
        print("b_temp")
        #rduino_temp.write(str.encode("b"))
    
    sleep(3)
```

## nano2台からデータを受け取りfirebaseのデータベースを更新するプログラム(python)
```
from time import sleep
import serial
import pyrebase

arduino_ph=serial.Serial('/dev/ttyUSB0',9600)
arduino_temp=serial.Serial('/dev/ttyUSB1',9600)

 #// Your web app's Firebase configuration
 #// For Firebase JS SDK v7.20.0 and later, measurementId is optional
firebaseConfig = {
    "apiKey": "AIzaSyA-DfJFfWMYFH46MYg-TOdA9YtHOB75qTg",
    "authDomain": "my-first-project-7e725.firebaseapp.com",
    "projectId": "my-first-project-7e725",
    "storageBucket": "my-first-project-7e725.appspot.com",
    "messagingSenderId": "666881609941",
    "appId": "1:666881609941:web:b6bb69e6b22f71dbef525c",
    "measurementId": "G-EVNRCJEJD1",
    #以下村追記
    "databaseURL": "https://my-first-project-7e725-default-rtdb.firebaseio.com/"
};
  #// Initialize Firebase
  #firebase.initializeApp(firebaseConfig);
  #firebase.analytics();
  
firebase=pyrebase.initialize_app(firebaseConfig)
m_db=firebase.database()
while(1):
    ph=arduino_ph.readline()
    ph_utf8=ph.decode()
    m_db.child("aquarium").update({"ph":ph_utf8})
    temp=arduino_temp.readline()
    temp_utf8=temp.decode()
    m_db.child("aquarium").update({"temp":temp_utf8})
    sleep(3)
```

## nano1台からデータを受け取りfirebaseのデータベースを更新するプログラム(python)
```

from time import sleep
import serial
import pyrebase

arduino=serial.Serial('/dev/ttyUSB0',9600)

 #// Your web app's Firebase configuration
  #// For Firebase JS SDK v7.20.0 and later, measurementId is optional
firebaseConfig = {
    "apiKey": "AIzaSyA-DfJFfWMYFH46MYg-TOdA9YtHOB75qTg",
    "authDomain": "my-first-project-7e725.firebaseapp.com",
    "projectId": "my-first-project-7e725",
    "storageBucket": "my-first-project-7e725.appspot.com",
    "messagingSenderId": "666881609941",
    "appId": "1:666881609941:web:b6bb69e6b22f71dbef525c",
    "measurementId": "G-EVNRCJEJD1",
    #以下村追記
    "databaseURL": "https://my-first-project-7e725-default-rtdb.firebaseio.com/"
};
  #// Initialize Firebase
  #firebase.initializeApp(firebaseConfig);
  #firebase.analytics();
  
firebase=pyrebase.initialize_app(firebaseConfig)
m_db=firebase.database()
while(1):
    ph=arduino.readline()
    ph_utf8=ph[0:4].decode()
    m_db.child("aquarium").update({"ph":ph_utf8})
    sleep(3)
```
