In this application I have used Raspberry Pi 4 to build and temperature sensor client/server application, where the embedded SBC reads the CPU core temperature from a file system entry and sends the data to a desktop computer client, which displays the data in a graphical form.
The server class executes on the Raspberry Pi
ThreadedServer.class which starts listening for connection at port 5050 its an infinite loop for each client’s request. Which creates an object of connection handler class and starts the initiation of that class through start() method.
ThreadedConnectionHandler.class: Connection handler class creates an object of 3 classes as mentioned below:
DateTimeService.class returns the date/time as a formatted string object.
TemperatureService.class returns the CPU temperature of the server which is in this instance is Raspberry Pi from the absolute path of Raspberry pie as mentioned below: Location: ‘/sys/class/thermal/thermal_zone0/temp.
LED.class triggers the change in the value of the variable from ‘0’ to ‘1’ on the below path to turn on/off the LED on Raspberry Pi.
ThreadedConnectionHandler.class then receives and processes the incoming commands from the client and checks if it’s a valid string object which in this case is ‘GetStats’. It uses the custom
DateTimeService.class to extract the current date and time and extracts the current CPU temperature from the path and turns the LED on before making this call through led.flash(“On”) as shown in the below code snippet.
The client class is executed on the terminal on the machine to connect to the server class to sends instructions and receive the data. The connection is made through the IP address of the Raspberry Pi as the port is already initialised. getstats() method is executed in the
Client.class which sends the commands to the
ThreadedServer.class and receives the data into string format for all the features.
Application.class is the main class which calls the
client.class to send commands and receive data from the server (Raspberry Pi), function invoked is
getTemperatureFromServer which gets the data in string format in a comma separated format. Which is then split into different column and the data is formatted as shown below:
Application.class extends on JFrame and creates the objects on the Gaurav’s Application such as Scroll Pane, Graph Panel, Input Panel (JTextField) and Sampling Rate Button (JButton). Scrolling Pane helps in scrolling the page if the height and the width is below 810 X 680, Graph pane is where the graph is presented in the window. Bottom panel holds the Input field and button to set the sampling rate as shown below in the screenshot 1. Once the sampling rate is set and the graph is plotted on a real time from the server data, I have created a middle pane that holds the current reading information, date and last reading value, reading ID and temperature. Finally, I have created the main panel on which I have included all of the above panes based on the code below:
ActionListener is implemented in
Application.class it captures the action, which is when the user sets the value for sampling rate (i.e. 3 seconds), It then initialise the
actionPerformed method and parses the 3 to the variable
samplingIntervalInSeconds, which is then initialised to the
timeInterval. At this stage I have initiated the
Client.class and created an empty array on which I am storing my string values for the last 20 data calls. The loop in initiated through
TimerTask method as shown in the code below:
In the final stage in
Application.class I am invoking the
Graph.class which takes the last 20 temperature values and put them into an empty array and plots the graph on it through
Graph.class, Its a for loop which revalidates and repaints the graph everytime new value of the temperature reading is received from the server, I have created the 3 more lines on the plot in
Graph.class which is Maximum, Minimum and Average reading based on the last 20 temperature reading from the array list as shown below in the code:
Graph.class I am executing the
paintComponent method in which initially I am drawing the x-axis and y-axis, secondly I am drawing the data point lines through a for loop, Maximum line, Minimum line and Average line based on the last 20 data points.
Step 1: Connect the Raspberry Pi to the eclipse through ssh call on your Pi host and provide your connection name and execute
ThreadedServer.class, you can also connect screen mouse and keyboards to your Pi and open a terminal and run the
ThreadedServer.class as shown below in the screenshot 2.
Step 2: Open the terminal on the client machine and execute the
Application.class and pass an IP address of the Raspberry Pi (192.168.0.20) or play the
Application.class from eclipse after including manual argument and set IP Address through run configurations in eclipse as shown below in the screenshot 4.
Step 3: Type an integer value in the input box and click on ‘Set Interval and Start’ as shown below in the screenshot 6.
Red: Maximum Line | Green: Average Line | Yellow: Minimum Line
Step 4: To stop the application click on the close button on the application window or stop the project from eclipse.
Binary Files: (In the above code I have reference the binary files in notes)
Before you go, share and subscribe to the channel if you thought this post was helpful. I really appreciate your support. Thanks!
How to create Plotly-Dash App and deploy it on Heroku Servers? (Using YouTube API with Python)
Top YouTube Channel app built through plotly-dash. App is currently live on Heroku servers. This app is used in my…
Converting Python File Into .exe Format | Encoding the Python Project – To Make It Non-Readable
Follow me on: