143 lines
4.1 KiB
Python
143 lines
4.1 KiB
Python
import network, time, random, request, base64, json, board
|
|
from machine import UART
|
|
|
|
wifi_en = board.pin(19, board.GPIO.OUT)
|
|
board.register(18, board.FPIOA.UART2_TX)
|
|
board.register(17, board.FPIOA.UART2_RX)
|
|
|
|
|
|
def wifi_enable(en):
|
|
global wifi_en
|
|
wifi_en.value(en)
|
|
|
|
|
|
def wifi_reset():
|
|
global uart
|
|
wifi_enable(0)
|
|
time.sleep_ms(200)
|
|
wifi_enable(1)
|
|
time.sleep(2)
|
|
uart = UART(UART.UART2, 115200, timeout=1000, read_buf_len=4096)
|
|
tmp = uart.read()
|
|
uart.write("AT+UART_CUR=921600,8,1,0,0\r\n")
|
|
print(uart.read())
|
|
uart = UART(
|
|
UART.UART2, 921600, timeout=1000, read_buf_len=10240
|
|
) # important! baudrate too low or read_buf_len too small will loose data
|
|
uart.write("AT\r\n")
|
|
tmp = uart.read()
|
|
print(tmp)
|
|
if not tmp.endswith("OK\r\n"):
|
|
print("reset fail")
|
|
return None
|
|
try:
|
|
nic = network.ESP8285(uart)
|
|
except Exception:
|
|
return None
|
|
return nic
|
|
|
|
|
|
def nic_init(account, password):
|
|
nic = wifi_reset()
|
|
if not nic:
|
|
raise Exception("[Cool.AI]:WiFi init fail")
|
|
|
|
nic.connect(account, password)
|
|
nic.ifconfig()
|
|
|
|
|
|
class SimpleEncode:
|
|
keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-={}[]:;<,>.?/|"
|
|
keyLength = len(keyStr)
|
|
encryptionA = 17
|
|
encryptionB = 8
|
|
decodeA = 0
|
|
preCountMax = 15
|
|
postCount = 5
|
|
randomChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop"
|
|
randomCharLength = len(randomChar)
|
|
# base64字符
|
|
ALPHABET = "ABCDEFGHIJKLMN0123456789OPQRSTUVWXYZ+/abcdefghijklmnopqrstuvwxyz"
|
|
STANDARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # 标准的字符串索引
|
|
|
|
# 找到密钥
|
|
for i in range(1, keyLength):
|
|
if (encryptionA * i) % keyLength == 1:
|
|
decodeA = i
|
|
|
|
def base64Encode(self, sourceStr):
|
|
encode = ""
|
|
for ch in base64.b64encode(sourceStr.encode()).decode():
|
|
if ch == "=":
|
|
encode += "="
|
|
else:
|
|
for i in range(64):
|
|
if ch == self.STANDARD[i]:
|
|
encode += self.ALPHABET[i]
|
|
return encode
|
|
|
|
def encrpyt(self, sourceStr):
|
|
srcLength = len(sourceStr)
|
|
# 先加入干扰字符的数量
|
|
addCharCount = (
|
|
random.randint(1, self.preCountMax) if srcLength < self.preCountMax else 0
|
|
)
|
|
# 随机字符
|
|
sb = str(addCharCount) + "|"
|
|
for i in range(addCharCount):
|
|
sb += self.randomChar[random.randint(0, self.randomCharLength - 1)]
|
|
|
|
sb += sourceStr
|
|
# 尾部固定增加x个字符
|
|
for i in range(self.postCount):
|
|
sb += self.randomChar[random.randint(0, self.randomCharLength - 1)]
|
|
|
|
# base64 加密
|
|
base64Str = self.base64Encode(sb)
|
|
|
|
destStr = ""
|
|
for i in range(len(base64Str)):
|
|
# 找到字符所在位置
|
|
position = self.keyStr.find(base64Str[i])
|
|
|
|
# 对字符进行转换
|
|
y = (self.encryptionA * position + self.encryptionB) % self.keyLength
|
|
|
|
# 找到替换后的字符
|
|
|
|
destStr += self.keyStr[y]
|
|
|
|
return destStr
|
|
|
|
|
|
def token(account, password):
|
|
url = "http://ai.heclouds.com:9090/v1/user/oneNetLogin"
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
}
|
|
simpleencode = SimpleEncode()
|
|
data = {"account": account, "password": simpleencode.encrpyt(password)}
|
|
|
|
req = request.post(url, data=json.dumps(data), headers=headers)
|
|
# print(req.text)
|
|
try:
|
|
return eval(req.text)["data"]["loginToken"]
|
|
except:
|
|
raise ValueError("[Cool.AI]:Wrong account or password ")
|
|
|
|
|
|
def post_ai(img, urlx, Token):
|
|
ur = "http://183.230.40.32:9090/v1/aiApi/picture/MixPY"
|
|
url = ur.replace("MixPY", urlx)
|
|
headers = {"Content-Type": "application/json", "Login-Token": "Token"}
|
|
|
|
headers["Login-Token"] = Token
|
|
|
|
imge = img.compressed(quality=50)
|
|
file = imge.to_bytes()
|
|
str = base64.b64encode(file).decode()
|
|
data = {"picture": [str]}
|
|
req = request.post(url, data=json.dumps(data), headers=headers)
|
|
return json.loads(req.text)
|
|
# return eval(req.text)
|