Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor logging and board initialization #2

Merged
merged 3 commits into from
Mar 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,31 @@
import logging
from flask import Flask
import time
import atexit
from .api import api_bp
from app.gpio import detect_board, print_board_status, board, init_board, cleanup_board

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def create_app():
# Create a Flask application instance
app = Flask(__name__)

initialize_board()

app.register_blueprint(api_bp, url_prefix='/api')

atexit.register(cleanup_board)

return app

def initialize_board():
detect_board()
while board.begin() != board.STA_OK: # Board begin and check board status
print_board_status()
logger.error("Board begin failed")
time.sleep(2)
print_board_status()
init_board()
logger.info("Board begin success")
6 changes: 5 additions & 1 deletion app/gpio/DFRobot_RaspberryPi_Expansion_Board.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
@url https://github.com/DFRobot/DFRobot_RaspberryPi_Expansion_Board
'''

import logging
import time

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

_PWM_CHAN_COUNT = 4
_ADC_CHAN_COUNT = 4

Expand Down Expand Up @@ -81,7 +85,7 @@ def begin(self):
self.set_pwm_disable()
self.set_pwm_duty(self.ALL, 0)
self.set_adc_disable()
print(f"last_operate_status: {self.last_operate_status}")
logger.info(f"last_operate_status: {self.last_operate_status}")
return self.last_operate_status

def set_addr(self, addr):
Expand Down
18 changes: 11 additions & 7 deletions app/gpio/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import logging
from .DFRobot_RaspberryPi_Expansion_Board import DFRobot_Expansion_Board_IIC as Board
import RPi.GPIO as GPIO
import spidev

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

board = Board(1, 0x10) # Select i2c bus 1, set address to 0x10
spi = spidev.SpiDev()

Expand All @@ -18,24 +22,24 @@ def init_board():

# Set the specified pin as an OUTPUT
GPIO.setup([i for i in range(22, 28)], GPIO.OUT, initial=GPIO.LOW)
print(f"GPIO setup complete!")
logger.info(f"GPIO setup complete!")

def cleanup_board():
GPIO.cleanup()
spi.close()

def detect_board():
l = board.detecte()
print(f"Board list: {l}")
logger.info(f"Board list: {l}")

def print_board_status():
if board.last_operate_status == board.STA_OK:
print("board status: everything ok")
logger.info("board status: everything ok")
elif board.last_operate_status == board.STA_ERR:
print("board status: unexpected error")
logger.error("board status: unexpected error")
elif board.last_operate_status == board.STA_ERR_DEVICE_NOT_DETECTED:
print("board status: device not detected")
logger.error("board status: device not detected")
elif board.last_operate_status == board.STA_ERR_PARAMETER:
print("board status: parameter error")
logger.error("board status: parameter error")
elif board.last_operate_status == board.STA_ERR_SOFT_VERSION:
print("board status: unsupport board framware version")
logger.error("board status: unsupport board framware version")
26 changes: 5 additions & 21 deletions run.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,10 @@
import logging
from app import create_app
from app.gpio import detect_board, print_board_status, board, init_board, cleanup_board
import atexit
import time

app = create_app()

def initialize_board():
detect_board()
while board.begin() != board.STA_OK: # Board begin and check board status
print_board_status()
print("Board begin failed")
time.sleep(2)
print_board_status()
init_board()
print("Board begin success")
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

atexit.register(cleanup_board)
app = create_app()

if __name__ == '__main__':
try:
initialize_board()
app.run(debug=True, port=5000, host='0.0.0.0')
finally:
# Cleanup GPIO to release resources
cleanup_board()
app.run(debug=True, port=5000, host='0.0.0.0')