diff --git a/rx/templates/index.html b/rx/templates/index.html
index 38c349e..cdd6ec3 100644
--- a/rx/templates/index.html
+++ b/rx/templates/index.html
@@ -98,8 +98,9 @@
var lon = msg.longitude.toFixed(5);
var alt = msg.altitude.toFixed(0);
var ascent = msg.ascent_rate.toFixed(1);
+ var numSV = msg.numSV.toFixed(0);
- var _new_desc = lat + ", " + lon + " " + alt + "m " + ascent + " m/s"
+ var _new_desc = msg.timestamp + "Z " + lat + ", " + lon + " " + alt + "m " + ascent + " m/s " + numSV + " SVs";
$('#gps-data').html(_new_desc);
}
});
@@ -180,8 +181,9 @@
var lon = msg.longitude.toFixed(5);
var alt = msg.altitude.toFixed(0);
var ascent = msg.ascent_rate.toFixed(1);
+ var numSV = msg.numSV.toFixed(0);
- var _gps_desc = lat + ", " + lon + " " + alt + "m " + ascent + " m/s"
+ var _gps_desc = lat + ", " + lon + " " + alt + "m " + ascent + " m/s, " + numSV + " SVs";
}
if(msg.sys_cal==3){
diff --git a/tx/WenetPiCamera2.py b/tx/WenetPiCamera2.py
index 27a8670..6028a8f 100644
--- a/tx/WenetPiCamera2.py
+++ b/tx/WenetPiCamera2.py
@@ -13,6 +13,7 @@
import glob
import os
import datetime
+import subprocess
import time
import traceback
@@ -97,12 +98,13 @@ class WenetPiCamera2(object):
self.debug_ptr("Camera Resolution: " + str(self.camera_properties['PixelArraySize']))
- # Configure camera.
+ # Configure camera, including flip settings.
capture_config = self.cam.create_still_configuration(
transform=Transform(hflip=self.horizontal_flip, vflip=self.vertical_flip)
)
self.cam.configure(capture_config)
+ # Set other settings, White Balance, exposure metering, etc.
self.cam.set_controls(
{'AwbMode': controls.AwbModeEnum.Daylight,
'AeMeteringMode': controls.AeMeteringModeEnum.Matrix,
@@ -114,9 +116,13 @@ class WenetPiCamera2(object):
self.debug_ptr("Configured lens position to " + str(self.lens_position))
self.cam.set_controls({"AfMode": controls.AfModeEnum.Manual, "LensPosition": self.lens_position})
- # Start the 'preview' mode, effectively opening the 'shutter'.
+ # Enable the camera, effectively opening the 'shutter'.
# This lets the camera gain control algs start to settle.
- self.cam.start()
+ #self.cam.start()
+
+ # NOTE - Trying out starting and stopping the camera just around image capture time.
+ # This may help deal with crashes after the camera is running for a long time, and also
+ # may help decrease CPU usage a little.
def debug_message(self, message):
""" Write a debug message.
@@ -142,8 +148,32 @@ class WenetPiCamera2(object):
filename: destination filename.
"""
+ # Ensure JPG quality is set as required.
self.cam.options['quality'] = quality
+ # Set other settings, White Balance, exposure metering, etc.
+ self.cam.set_controls(
+ {'AwbMode': controls.AwbModeEnum.Daylight,
+ 'AeMeteringMode': controls.AeMeteringModeEnum.Matrix,
+ 'NoiseReductionMode': controls.draft.NoiseReductionModeEnum.Off}
+ )
+
+ # Set Pi Camera 3 lens position
+ if 'LensPosition' in self.cam.camera_controls:
+ self.debug_ptr("Configured lens position to " + str(self.lens_position))
+ self.cam.set_controls({"AfMode": controls.AfModeEnum.Manual, "LensPosition": self.lens_position})
+
+ self.debug_message("Enabling camera for image capture")
+
+ try:
+ self.cam.start()
+ except Exception as e:
+ self.debug_message("Could not enable camera! - " + str(e))
+ sleep(1)
+ return False
+
+ sleep(3)
+
# Attempt to capture a set of images.
for i in range(self.num_images):
self.debug_message("Capturing Image %d of %d" % (i+1,self.num_images))
@@ -157,8 +187,10 @@ class WenetPiCamera2(object):
self.debug_message("Capture Error: %s" % str(e))
# Immediately return false. Not much point continuing to try and capture images.
return False
-
+ self.debug_message("Disabling camera.")
+ self.cam.stop()
+
# Otherwise, continue to pick the 'best' image based on filesize.
self.debug_message("Choosing Best Image.")
pic_list = glob.glob("%s_*.jpg" % self.temp_filename_prefix)
@@ -307,6 +339,11 @@ class WenetPiCamera2(object):
# Increment image ID.
image_id = (image_id + 1) % 256
+
+ _cpu_temp = self.get_cpu_temperature()
+ _cpu_freq = self.get_cpu_speed()
+ self.debug_message(f"CPU State: Temperature: {_cpu_temp:.1f} degC, Frequency: {_cpu_freq} MHz")
+
# Loop!
self.debug_message("Uh oh, we broke out of the main thread. This is not good!")
@@ -348,6 +385,26 @@ class WenetPiCamera2(object):
def trigger_capture():
pass
+ def get_cpu_temperature(self):
+ """ Grab the temperature of the RPi CPU """
+ try:
+ data = subprocess.check_output("/usr/bin/vcgencmd measure_temp", shell=True)
+ temp = data.decode().split('=')[1].split('\'')[0]
+ return float(temp)
+ except Exception as e:
+ self.debug_message("Error reading temperature - %s" % str(e))
+ return -999
+
+ def get_cpu_speed(self):
+ """ Get the current CPU Frequency """
+ try:
+ data = subprocess.check_output("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", shell=True)
+ freq = int(data.decode().strip())/1000
+ return freq
+ except Exception as e:
+ self.debug_message("Error reading CPU Freq - %s" % str(e))
+ return -1
+
# Basic transmission test script.
if __name__ == "__main__":