import machine
import utime
import azure.iot.device
# Define Azure IoT Hub connection string and device ID
CONNECTION_STRING = "HostName=TrafficManagement.azure-devices.net;DeviceId=RaspPi;SharedAccessKey=7ryCImqSUWqhp5ChKRrkZxNCwpjqtJHL2AIoTGkwJBs="
DEVICE_ID = "RaspPi"
# Initialize the IoT Hub client
from azure.iot.device import IoTHubDeviceClient, Message
client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
# GPIO pins for the HC-SR04 sensor
trigger_pin = machine.Pin(2, machine.Pin.OUT)
echo_pin = machine.Pin(3, machine.Pin.IN)
# Traffic light control pins (simulated)
red_light = machine.Pin(10, machine.Pin.OUT)
yellow_light = machine.Pin(11, machine.Pin.OUT)
green_light = machine.Pin(12, machine.Pin.OUT)
def measure_distance():
trigger_pin.value(0)
utime.sleep_us(2)
trigger_pin.value(1)
utime.sleep_us(10)
trigger_pin.value(0)
while echo_pin.value() == 0:
pulse_start = utime.ticks_us()
while echo_pin.value() == 1:
pulse_end = utime.ticks_us()
pulse_duration = utime.ticks_diff(pulse_end, pulse_start)
distance = (pulse_duration * 0.0343) / 2 # Speed of sound is approximately 343 meters per second
return distance
def control_traffic_lights(distance):
if distance < 10:
red_light.value(0)
yellow_light.value(1)
green_light.value(0)
elif 10 <= distance < 20:
red_light.value(1)
yellow_light.value(0)
green_light.value(0)
else:
red_light.value(0)
yellow_light.value(0)
green_light.value(1)
while True:
distance = measure_distance()
control_traffic_lights(distance)
# For simulation purposes, print the distance and the traffic light state
print("Distance: {:.2f} cm".format(distance))
# Send distance data to IoT Hub
telemetry_data = {"distance_cm": distance}
message = Message(telemetry_data)
client.send_message(message)
utime.sleep(2) # Adjust the sleep duration as needed