First Commit

This commit is contained in:
Alauddin Maulana Hirzan 2024-05-10 18:26:38 +07:00
commit e319bbd89b
Signed by: maulanahirzan
GPG key ID: 484DAC952787FA13
33 changed files with 740 additions and 0 deletions

View file

@ -0,0 +1,3 @@
# 7 Segment Example Code #
I adapted original code from somewhere into this code. There is an example how to use the code in **main section** of the code.

View file

@ -0,0 +1,151 @@
from machine import Pin
from time import time,sleep
from utime import sleep_ms
# Map 1st Segment Pins
d1_p1 = Pin(2,Pin.OUT) # E
d1_p2 = Pin(3,Pin.OUT) # D
d1_p3 = Pin(4,Pin.OUT) # DP
d1_p4 = Pin(5,Pin.OUT) # C
d1_p5 = Pin(6,Pin.OUT) # G
d1_p7 = Pin(22,Pin.OUT) # B
d1_p10 = Pin(26,Pin.OUT) # F
d1_p11 = Pin(27,Pin.OUT) # A
# Map 1st Digit Pins
c1_1 = Pin(10,Pin.OUT)
c1_2 = Pin(9,Pin.OUT)
c1_3 = Pin(8,Pin.OUT)
# Map 2nd Segment Pins
d2_p1 = Pin(11,Pin.OUT) # E
d2_p2 = Pin(12,Pin.OUT) # D
d2_p3 = Pin(13,Pin.OUT) # DP
d2_p4 = Pin(14,Pin.OUT) # C
d2_p5 = Pin(15,Pin.OUT) # G
d2_p7 = Pin(16,Pin.OUT) # B
d2_p10 = Pin(17,Pin.OUT) # F
d2_p11 = Pin(18,Pin.OUT) # A
# Map 2nd Digit Pins
c2_1 = Pin(19,Pin.OUT)
c2_2 = Pin(20,Pin.OUT)
c2_3 = Pin(21,Pin.OUT)
# Store into Lists
c1_pins = [c1_1,c1_2,c1_3]
d1_pins = [d1_p11,d1_p7,d1_p4,d1_p2,d1_p1,d1_p10,d1_p5]
c2_pins = [c2_1,c2_2,c2_3]
d2_pins = [d2_p11,d2_p7,d2_p4,d2_p2,d2_p1,d2_p10,d2_p5]
# Define Numeric Patterns
num_patterns = [
0b1111110, # 0
0b0110000, # 1
0b1101101, # 2
0b1111001, # 3
0b0110011, # 4
0b1011011, # 5
0b1011111, # 6
0b1110000, # 7
0b1111111, # 8
0b1111011 # 9
]
def turnDigits(board,power):
if(board == 1):
if(power):
for control in c1_pins:
control.value(0)
else:
for control in c1_pins:
control.value(1)
else:
if(power):
for control in c2_pins:
control.value(0)
else:
for control in c2_pins:
control.value(1)
def switchDigits(board,digit):
if(board == 1):
if(digit == 0):
c1_pins[0].value(0)
c1_pins[1].value(1)
c1_pins[2].value(1)
elif(digit == 1):
c1_pins[0].value(1)
c1_pins[1].value(0)
c1_pins[2].value(1)
else:
c1_pins[0].value(1)
c1_pins[1].value(1)
c1_pins[2].value(0)
else:
if(digit == 0):
c2_pins[0].value(0)
c2_pins[1].value(1)
c2_pins[2].value(1)
elif(digit == 1):
c2_pins[0].value(1)
c2_pins[1].value(0)
c2_pins[2].value(1)
else:
c2_pins[0].value(1)
c2_pins[1].value(1)
c2_pins[2].value(0)
def displayNumber(board,number):
# Extract the individual digits from the number
num1 = number // 100
num2 = (number % 100) // 10
num3 = number % 10
# Turn Off All
turnDigits(board,False)
start_time = time()
# Display the digits on the 7-segment display
while time() - start_time < .25:
switchDigits(board,0)
setDisplay(board, 0, num3)
sleep_ms(5)
switchDigits(board,1)
setDisplay(board, 1, num2)
sleep_ms(5)
switchDigits(board,2)
setDisplay(board, 2, num1)
sleep_ms(5)
else:
turnDigits(board,False)
def setDisplay(board,digit,num):
if(board == 1):
# Set Pattern to Display
for i, pin in enumerate(d1_pins):
pattern = num_patterns[num]
target = (pattern >> (6 - i)) & 1
pin.value(target)
else:
# Set Pattern to Display
for i, pin in enumerate(d2_pins):
pattern = num_patterns[num]
target = (pattern >> (6 - i)) & 1
pin.value(target)
# Main Script
def main():
board = 1
powerOff = False
if(powerOff):
turnDigits(board,False)
else:
for data in range(100):
displayNumber(board,data)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,3 @@
# ADC Reading Example Code #
This is a simple code to read ADC using MicroPython.

View file

@ -0,0 +1,11 @@
from machine import ADC
import time
# Assign ADC Pin 0 to Sensor
sensor = ADC(0)
# Repeatedly Read u16 value and print
while True:
result = sensor.read_u16()
print(result)
time.sleep(1)

View file

@ -0,0 +1,36 @@
from urequests import get
## Blynk API Class
class BlynkAPI:
# Initialize Blynk API Class
def __init__(self):
self.server_address: str = "blynk.cloud"
self.token: str = "<Put Yout Token Here>"
self.fetch_link = f"https://{self.server_address}/external/api/get?token={self.token}&"
self.update_link = f"https://{self.server_address}/external/api/update?token={self.token}&"
# Method to get vpin value (pin: v0, v1, v2, ...)
def fetchPin(self, pin: str):
response = get(self.fetch_link+pin)
result = response.json() # For some reason this line will cause some devices to stuck. Only to limited to Blynk API Response
status = response.status_code
response.close()
return status, result # Return Status Code and Result
# Method to update vpin value (pin: v0, v1, v2, ...; value: int or str)
def updatePin(self, pin: str, value):
if type(value) is int:
value = str(value)
response = get(self.update_link+pin+"="+value)
status = response.status_code
response.close
return status # Return Status Code
## Usage Sample
def main():
# Connect to Network
# Initialize Class
api = BlynkAPI()
status, result = fetchPin("v0") # Fetch vPin v0
status = updatePin("v1", 10) # Update vPin v1 to 10

View file

@ -0,0 +1,3 @@
# Blynk HTTP API Access Example Code #
This is a simple Blynk HTTP API access using MicroPython. However, for some reason there is a problem extracting data from Blynk HTTP API. This problem only limited to Blynk HTTP API response data.

View file

@ -0,0 +1,3 @@
# DHT11/22 Reading Example Code #
This is a simple code for reading DHT11/22 sensor using MicroPython. With extra LED blinks

View file

@ -0,0 +1,32 @@
from machine import Pin
from time import sleep
import dht
from utime import sleep_ms
# Define DHT Version (11 or 22) and Input Pin
sensor = dht.DHT22(Pin(16))
# Define Onboard LED Pin
led = Pin(2,Pin.OUT)
# Turn it off first
led.value(0)
# Define blink function
def blink():
led.value(0)
sleep_ms(50)
led.value(1)
# Main Script Here
while True:
try:
sleep(2)
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
if(temp > 24.0 or hum > 49.0):
blink()
print('Temperature: %3.1f C' %temp)
print('Humidity: %3.1f %%' %hum)
print("")
except OSError as e:
print('Failed to read sensor.')

View file

@ -0,0 +1,7 @@
# HC-SR04 Example Code #
This code show how to use the HC-SR04 Ultrasonic Sensor using Micropython.
* Original Driver code : https://github.com/rsc1975/micropython-hcsr04/tree/master.
* The main code I made it myself.

View file

@ -0,0 +1,82 @@
from machine import Pin, time_pulse_us
from utime import sleep_us
__version__ = '0.2.1'
__author__ = 'Roberto Sánchez'
__license__ = "Apache License 2.0. https://www.apache.org/licenses/LICENSE-2.0"
class HCSR04:
"""
Driver to use the untrasonic sensor HC-SR04.
The sensor range is between 2cm and 4m.
The timeouts received listening to echo pin are converted to OSError('Out of range')
"""
# echo_timeout_us is based in chip range limit (400cm)
def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30):
"""
trigger_pin: Output pin to send pulses
echo_pin: Readonly pin to measure the distance. The pin should be protected with 1k resistor
echo_timeout_us: Timeout in microseconds to listen to echo pin.
By default is based in sensor limit range (4m)
"""
self.echo_timeout_us = echo_timeout_us
# Init trigger pin (out)
self.trigger = Pin(trigger_pin, mode=Pin.OUT, pull=None)
self.trigger.value(0)
# Init echo pin (in)
self.echo = Pin(echo_pin, mode=Pin.IN, pull=None)
def _send_pulse_and_wait(self):
"""
Send the pulse to trigger and listen on echo pin.
We use the method `machine.time_pulse_us()` to get the microseconds until the echo is received.
"""
self.trigger.value(0) # Stabilize the sensor
sleep_us(5)
self.trigger.value(1)
# Send a 10us pulse.
sleep_us(10)
self.trigger.value(0)
try:
pulse_time = time_pulse_us(self.echo, 1, self.echo_timeout_us)
# time_pulse_us returns -2 if there was timeout waiting for condition; and -1 if there was timeout during the main measurement. It DOES NOT raise an exception
# ...as of MicroPython 1.17: http://docs.micropython.org/en/v1.17/library/machine.html#machine.time_pulse_us
if pulse_time < 0:
MAX_RANGE_IN_CM = const(500) # it's really ~400 but I've read people say they see it working up to ~460
pulse_time = int(MAX_RANGE_IN_CM * 29.1) # 1cm each 29.1us
return pulse_time
except OSError as ex:
if ex.args[0] == 110: # 110 = ETIMEDOUT
raise OSError('Out of range')
raise ex
def distance_mm(self):
"""
Get the distance in milimeters without floating point operations.
"""
pulse_time = self._send_pulse_and_wait()
# To calculate the distance we get the pulse_time and divide it by 2
# (the pulse walk the distance twice) and by 29.1 becasue
# the sound speed on air (343.2 m/s), that It's equivalent to
# 0.34320 mm/us that is 1mm each 2.91us
# pulse_time // 2 // 2.91 -> pulse_time // 5.82 -> pulse_time * 100 // 582
mm = pulse_time * 100 // 582
return mm
def distance_cm(self):
"""
Get the distance in centimeters with floating point operations.
It returns a float
"""
pulse_time = self._send_pulse_and_wait()
# To calculate the distance we get the pulse_time and divide it by 2
# (the pulse walk the distance twice) and by 29.1 becasue
# the sound speed on air (343.2 m/s), that It's equivalent to
# 0.034320 cm/us that is 1cm each 29.1us
cms = (pulse_time / 2) / 29.1
return cms

View file

@ -0,0 +1,24 @@
from hcsr04 import HCSR04
from time import sleep
from machine import Pin
from utime import sleep_ms
# Load Driver and Assign Each Pin
sensor = HCSR04(trigger_pin=4, echo_pin=5, echo_timeout_us=10000)
# LED Pin for Fun
led = Pin(2,Pin.OUT)
led.value(0)
# Create Blink Function
def blink():
led.value(0)
sleep_ms(50)
led.value(1)
# Main Script Here
while True:
distance = sensor.distance_cm()
print('Distance:', distance, 'cm')
if(distance<=20):
blink()
sleep(1)

View file

@ -0,0 +1,3 @@
# I2C Display Controller Example Code #
This is a simple code to control I2C Display. MicroPython needs **ssd1306 driver** to work.

View file

@ -0,0 +1,11 @@
from machine import Pin, SoftI2C
# This Driver Lib may not installed yet
import ssd1306
# Define i2c peripheral
i2c = SoftI2C(sda=Pin(5), scl=Pin(4))
# Configure I2C Display Resolution
display = ssd1306.SSD1306_I2C(128, 64, i2c)
# Test Output
display.text('Hello, World!', 0, 0, 1)
display.show()

8
Example - MQ9/README.md Normal file
View file

@ -0,0 +1,8 @@
# MQ-9 Gas Sensor Example Code
The main script I wrote it myself adjusting to my needs
* Original Driver: https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ
* Adapted by : https://github.com/leech001/MQ9/tree/master
* The main code I made it myself.

69
Example - MQ9/main_MQ9.py Normal file
View file

@ -0,0 +1,69 @@
from machine import ADC, Pin
from mq9 import MQ
import time
import dht
import network
import ntptime
import urequests
# Global Params
gas = ADC(Pin(35))
led = Pin(2,Pin.OUT)
led.value(0)
# Function to read MQ9 Sensor
def read_mq9(mq):
while True:
try:
adc = gas.read_u16()
sensor_volt = gas.read_uv()/1000000
perc = mq.MQPercentage()
break
except:
pass
co = perc["CO"]*1000
if co >= 10000:
cp = 10000
result = [adc,sensor_volt,co]
return result
# Function to Blink
def blink():
led.value(1)
time.sleep(0.5)
led.value(0)
time.sleep(0.5)
# Function to Blink Faster
def blink_fast():
led.value(1)
time.sleep(0.25)
led.value(0)
time.sleep(0.25)
# Main Script
def main():
# Calibrate Sensor
print("Calibrating MQ-9 Sensor")
led.value(1)
while True:
try:
mq = MQ()
break
except:
pass
led.value(0)
print("Calibrated")
print("")
print("Start Monitoring:")
print("")
while True:
result = read_mq9(mq)
print(f"ADC Value : {result[0]}, Sensor Voltage : {result[1]} Volt, and Carbon Monoxide : {result[2]} ppm")
if __name__ == "__main__":
main()

125
Example - MQ9/mq9.py Normal file
View file

@ -0,0 +1,125 @@
# adapted from https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ
import time
import math
from machine import ADC,Pin
class MQ:
# Hardware Related Macros
RL_VALUE = 10 # define the load resistance on the board, in kilo ohms
RO_CLEAN_AIR_FACTOR = 9.83 # RO_CLEAR_AIR_FACTOR=(Sensor resistance in clean air)/RO,
# which is derived from the chart in datasheet
# Software Related Macros
CALIBARAION_SAMPLE_TIMES = 50 # define how many samples you are going to take in the calibration phase
CALIBRATION_SAMPLE_INTERVAL = 500 # define the time interal(in milisecond) between each samples in the
# cablibration phase
READ_SAMPLE_INTERVAL = 50 # define how many samples you are going to take in normal operation
READ_SAMPLE_TIMES = 5 # define the time interal(in milisecond) between each samples in
# normal operation
# Application Related Macros
GAS_LPG = 0
GAS_CO = 1
GAS_SMOKE = 2
def __init__(self, ro=10):
self.ro = ro
self.adc = ADC(Pin(35))
self.LPGCurve = [2.3, 0.21, -0.47] # two points are taken from the curve.
# with these two points, a line is formed which is "approximately equivalent"
# to the original curve.
# data format:{ x, y, slope}; point1: (lg200, 0.21), point2: (lg10000, -0.59)
self.COCurve = [2.3, 0.72, -0.34] # two points are taken from the curve.
# with these two points, a line is formed which is "approximately equivalent"
# to the original curve.
# data format:[ x, y, slope]; point1: (lg200, 0.72), point2: (lg10000, 0.15)
self.SmokeCurve = [2.3, 0.53, -0.44] # two points are taken from the curve.
# with these two points, a line is formed which is "approximately equivalent"
# to the original curve.
# data format:[ x, y, slope]; point1: (lg200, 0.53), point2: (lg10000, -0.22)
# print("Calibrating...")
self.ro = self.MQCalibration()
# print("Calibration is done...\n")
# print("Ro=%f kohm" % self.ro)
def MQPercentage(self):
val = {}
read = self.MQRead()
val["GAS_LPG"] = self.MQGetGasPercentage(read / self.ro, self.GAS_LPG)
val["CO"] = self.MQGetGasPercentage(read / self.ro, self.GAS_CO)
val["SMOKE"] = self.MQGetGasPercentage(read / self.ro, self.GAS_SMOKE)
return val
# MQResistanceCalculation
# Input: raw_adc - raw value read from adc, which represents the voltage
# Output: the calculated sensor resistance
# Remarks: The sensor and the load resistor forms a voltage divider. Given the voltage
# across the load resistor and its resistance, the resistance of the sensor
# could be derived.
def MQResistanceCalculation(self, raw_adc):
return float(self.RL_VALUE * (4095.0 - raw_adc) / float(raw_adc))
# MQCalibration
# Output: Ro of the sensor
# Remarks: This function assumes that the sensor is in clean air. It use
# MQResistanceCalculation to calculates the sensor resistance in clean air
# and then divides it with RO_CLEAN_AIR_FACTOR. RO_CLEAN_AIR_FACTOR is about
# 10, which differs slightly between different sensors.
def MQCalibration(self):
val = 0.0
for i in range(self.CALIBARAION_SAMPLE_TIMES): # take multiple samples
val += self.MQResistanceCalculation(self.adc.read())
time.sleep(self.CALIBRATION_SAMPLE_INTERVAL / 1000.0)
val = val / self.CALIBARAION_SAMPLE_TIMES # calculate the average value
val = val / self.RO_CLEAN_AIR_FACTOR # divided by RO_CLEAN_AIR_FACTOR yields the Ro
# according to the chart in the datasheet
return val
# MQRead
# Output: Rs of the sensor
# Remarks: This function use MQResistanceCalculation to caculate the sensor resistenc (Rs).
# The Rs changes as the sensor is in the different consentration of the target
# gas. The sample times and the time interval between samples could be configured
# by changing the definition of the macros.
def MQRead(self):
rs = 0.0
for i in range(self.READ_SAMPLE_TIMES):
rs += self.MQResistanceCalculation(self.adc.read())
time.sleep(self.READ_SAMPLE_INTERVAL / 1000.0)
rs = rs / self.READ_SAMPLE_TIMES
return rs
# MQGetGasPercentage
# Input: rs_ro_ratio - Rs divided by Ro
# gas_id - target gas type
# Output: ppm of the target gas
# Remarks: This function passes different curves to the MQGetPercentage function which
# calculates the ppm (parts per million) of the target gas.
def MQGetGasPercentage(self, rs_ro_ratio, gas_id):
if gas_id == self.GAS_LPG:
return self.MQGetPercentage(rs_ro_ratio, self.LPGCurve)
elif gas_id == self.GAS_CO:
return self.MQGetPercentage(rs_ro_ratio, self.COCurve)
elif gas_id == self.GAS_SMOKE:
return self.MQGetPercentage(rs_ro_ratio, self.SmokeCurve)
return 0
# MQGetPercentage
# Input: rs_ro_ratio - Rs divided by Ro
# pcurve - pointer to the curve of the target gas
# Output: ppm of the target gas
# Remarks: By using the slope and a point of the line. The x(logarithmic value of ppm)
# of the line could be derived if y(rs_ro_ratio) is provided. As it is a
# logarithmic coordinate, power of 10 is used to convert the result to non-logarithmic
# value.
def MQGetPercentage(self, rs_ro_ratio, pcurve):
return math.pow(10, (((math.log(rs_ro_ratio) - pcurve[1]) / pcurve[2]) + pcurve[0]))

View file

@ -0,0 +1,63 @@
import network
import mip
# Put Your SSID and Password
SSID: str = ""
Password: str = ""
reset = True # To Reset Network State and Force Connect
print(">> Start MicroPython Libs Installer ... ")
print(">> Connecting ... ")
wlan0 = network.WLAN(network.STA_IF)
if reset:
wlan0.active(True)
# Masukkan SSID dan Password
wlan0.connect(SSID, Password)
while not wlan0.isconnected():
wlan0.active(True)
pass
status = wlan0.isconnected()
if(status == True):
print("==>> Connected")
print(">> Verifying Libs urequests ...")
try:
import urequests
print("==>> OK")
except:
print("==>> Failed. Installing Libs ... ")
mip.install('urequests')
print(">> Verifying Libs umqtt.robust ...")
try:
import umqtt.robust
print("==>> OK")
except:
print("==>> Failed. Installing Libs ... ")
mip.install("umqtt.robust")
print(">> Verifying Libs umqtt.simple ...")
try:
import umqtt.simple
print("==>> OK")
except:
print("==>> Failed. Installing Libs ... ")
mip.install("umqtt.simple")
print(">> Verifying Libs ssd1306 ...")
try:
import ssd1306
print("==>> OK")
except:
print("==>> Failed. Installing Libs ... ")
mip.install("ssd1306")
print(">> Verifying Libs aioble ...")
try:
import aioble
print("==>> OK")
except:
print("==>> Failed. Installing Libs ... ")
mip.install("aioble")
else:
print("==>> Connection Failed")

View file

@ -0,0 +1,24 @@
import ntptime
import time
class NTPSetup():
def __init__(self):
# Set Date Time
ntptime.settime()
# Get Date Time
def getDateTime(self):
self.devdatetime = time.localtime()
self.devtime = str(self.devdatetime[3]+7)+":"+str(self.devdatetime[4])+":"+str(self.devdatetime[5])
self.devdate = str(self.devdatetime[2])+"/"+str(self.devdatetime[1])+"/"+str(self.devdatetime[0])
return self.devdate,self.devtime
def main():
# Connect to Internet
ntp = NTPSetup()
devdate,devtime = ntp.getDateTime()
print(devdate,devtime)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,6 @@
# A Collection of Helper MicroPython Scripts #
* **NTPSetup.py** : A helper class to configure NTP (Need ISO Date Formatting)
* **WiFiManager.py** : A helper class to connect WiFi and verify Internet using simple requests
* **LibInstaller.py** : A helper class to install extra libraries from micropython.

View file

@ -0,0 +1,42 @@
import network
from urequests import get
class WiFiManager():
def __init__(self,):
self.reset = True
# Koneksi Wi-Fi
def connectWifi(self,SSID,Password):
self.wlan0 = network.WLAN(network.STA_IF)
if self.reset:
self.wlan0.active(True)
self.wlan0.connect(SSID, Password)
while not self.wlan0.isconnected():
self.wlan0.active(True)
pass
self.status = self.wlan0.isconnected()
self.ip_addr = self.wlan0.ifconfig()
return self.status,self.ip_addr
# Tes Koneksi
def testInternet(self):
response = get("https://example.com/")
status = response.status_code
response.close()
if status == 200:
return True
else:
return False
def main():
handler = WiFiManager()
status,ip = handler.connectWLAN("","")
print(ip,status)
status = handler.testInternet()
print(status)
if __name__ == '__main__':
main()

View file

@ -0,0 +1,3 @@
# OLED Display Example Code #
This is a simple code to control OLED Display using SPI Protocol

View file

@ -0,0 +1,28 @@
from machine import Pin, SoftSPI
import ssd1306
sck = Pin(14) # D0
scl = Pin(13) # D1
spi = SoftSPI(baudrate=500000, polarity=1, phase=0, sck=sck, mosi=scl, miso=Pin(12))
rst = Pin(4) # reset
dc = Pin(5) # data/command
cs = Pin(15) # chip select, some modules do not have a pin for this
display = ssd1306.SSD1306_SPI(128, 64, spi, dc, rst, cs)
# display.text('Hello, World!', 0, 0, 1)
# display.show()
display.fill(0)
display.fill_rect(0, 0, 32, 32, 1)
display.fill_rect(2, 2, 28, 28, 0)
display.vline(9, 8, 22, 1)
display.vline(16, 2, 22, 1)
display.vline(23, 8, 22, 1)
display.fill_rect(26, 24, 2, 4, 1)
display.text('MicroPython', 40, 0, 1)
display.text('SSD1306', 40, 12, 1)
display.text('OLED 128x64', 40, 24, 1)
display.show()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

BIN
Pinouts/Pinout-ESP32.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
Pinouts/Pinout-ESP8266.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
Pinouts/Pinout-MQ7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
Pinouts/Pinout-Pico-W.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
Pinouts/Pinout-Pico.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

BIN
Pinouts/Pinout-SIM800L.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# A Collection of Example Codes #
This folder contains many simple codes to access several sensors or peripherals. Need to be noted that this **MAY NOT** work in your board. Always **VERIFY** before using.