print('This program integrate ESP32 + Ultrasonic + OLED')
#Import all related module/library
import ultrasonic_lib
import oled_lib
from utime import sleep
from machine import Pin, SoftI2C, PWM #PWM=Pulse Width Modulation, SoftI2C = SCL,SDA
#import requests
#Declare pin connection for ultrasonic and
#Create an object for ultrasonic using OOP (Object Oriented Programming)
#format OOP --> library name.class name(trigger_pin, echo_pin, echo_timeout_us=500*2*30)
ciku = ultrasonic_lib.HCSR04(trigger_pin=12, echo_pin=27, echo_timeout_us=500*2*30)
#Pin declaration on OLED
i2c_oleddisplay = SoftI2C(scl=Pin(22), sda=Pin(21))
#3. Define the OLED variables
oled_width = 128 #based on spec
oled_height = 64 #based on spec
#4. Use OOP (Object Oriented Programming) to create the object
#Remarks: Object format --> library name.class name
#(width, height, i2c)
oled = oled_lib.SSD1306_I2C(oled_width, oled_height, i2c_oleddisplay)
#declare buzzer connection
buzzer = PWM(Pin(23), Pin.OUT)
#Your Favoriot cloud platform information
url='https://apiv2.favoriot.com/v2/streams'
Device_ID='deviceDefault@Siti_Marwangi'
Access_Token='MjN56YcbjIQErbs6lpHQ5KUCn5LrKHJi'
while True:
#Test ciku!
jarak_in_mm = ciku.distance_mm()
jarak_in_cm = ciku.distance_cm()
#Display the distance values in mm & cm (Serial Monitor) - seen by programmer
print('The distance from an object in mm is : ', jarak_in_mm)
print('The distance from an object in cm is : ', jarak_in_cm)
print('-------------------------------------------------------')
print('\n')
#Display the distance value on oled screen:
oled.fill(0)
oled.text('Object Detected', 0, 0, 1) #x-axis, y-axis, colorfont(1-white,0-black)
oled.text(str(jarak_in_mm), 5, 20, 1)
oled.text('mm', 45, 20, 1)
oled.text(str(jarak_in_cm), 5, 40, 1)
oled.text('cm', 75, 40, 1)
oled.show()
#Making decision on how close the object is
if jarak_in_cm < 100:
#Making sound for buzzer
for i in range (5):
buzzer.init(freq=1000, duty=300)
sleep(0.5)
buzzer.init(freq=1, duty=0)
sleep(0.5)
elif 100 <= jarak_in_cm < 150:
for i in range (5):
buzzer.init(freq=500, duty=512)
sleep(0.5)
buzzer.init(freq=1, duty=0)
sleep(0.5)
else:
buzzer.init(freq=1, duty=0)
#Set the data to be sent to clould platform using JSON format
#JSON format --> {key:value}
sensor_data={
"device_developer_id":Device_ID,
"data stream":{'field1':jarak_in_cm}
}
http_request={
'Content-Type':'application/json',
'Apikey':Access_Token
}
#Now, jom send data to cloud!
#data_submission=requests.post(url, json=sensor_data, headers=http_request)
#print('Data submission status is', data_submission.status_code)
#data_submission.close()
#print('***********************************')
sleep(5)