-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_tx2.py
More file actions
executable file
·80 lines (68 loc) · 2.24 KB
/
test_tx2.py
File metadata and controls
executable file
·80 lines (68 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
import sys, time
from esp32 import RMT
from machine import Pin
class OOKEncoder:
# Generic ASK/OOK generator for 433MHz protocols
chirp_time = 500 # µs
chirps = ("011", "001") # 0 and 1 respectively
preamble0 = "111111111111111" # ping/calibrate tx (generally 1's)
preamble1 = "000000000" # preamble before and between packets (generally 0's)
preamble2 = "1" # low-then-high codes should have a "1" at the end of preamble
trailer = "" # high-then-low codes should have an "1" trailer
code_bits = 24 # number of bits spanned by the code word
repeat = 3 # send the code "n" times to increase chance of reception
def __init__(self):
pass
def encode(self, code):
# Convert bits to chirps
chirp_seq = "0" + self.preamble0
for _ in range(0, self.repeat):
chirp_seq += self.preamble1
chirp_seq += self.preamble2
for i in range(self.code_bits - 1, -1, -1):
bit = (code & (1 << i)) and 1 or 0
chirp_seq += self.chirps[bit]
chirp_seq += self.trailer
chirp_seq += "0"
# Convert chirps to RMT waveform
rmtwaveform = []
current_level = -1
for chirp in chirp_seq:
if chirp != current_level:
rmtwaveform.append(self.chirp_time)
current_level = chirp
continue
rmtwaveform[-1] += self.chirp_time
return rmtwaveform
class HT6P20(OOKEncoder):
name = "HT6P20"
chirp_time = 500 # µs
chirps = ("011", "001")
preamble1 = "0" * 23
preamble2 = "1"
trailer = ""
code_bits = 28 # code must supply the suffix 0b0101
class EV1527(OOKEncoder):
name = "EV1527"
chirp_time = 333 # µs
chirps = ("1000", "1110")
preamble1 = "0" * 31
preamble2 = ""
trailer = "1"
code_bits = 24
pin = Pin(2)
# Resolution 80 MHz / 80 = 1 MHz = 1µs
rmt = RMT(0, pin=pin, clock_div=80, idle_level=0)
encoder = HT6P20()
code = 12345669
# encoder = EV1527()
# code = 1234567
while True:
print("Sending", code)
rmtwaveform = encoder.encode(code)
# print(rmtwaveform)
rmt.write_pulses(tuple(rmtwaveform), 0)
time.sleep(5)
code += 16
# code += 1