初始化提交
This commit is contained in:
0
arduino-cli/libraries/Blynk/scripts/README.md
Normal file
0
arduino-cli/libraries/Blynk/scripts/README.md
Normal file
78
arduino-cli/libraries/Blynk/scripts/blynk-ser.bat
Normal file
78
arduino-cli/libraries/Blynk/scripts/blynk-ser.bat
Normal file
@@ -0,0 +1,78 @@
|
||||
@echo off
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
REM === Edit these lines to match your need ===
|
||||
|
||||
set COMM_PORT=COM1
|
||||
set COMM_BAUD=9600
|
||||
set SERV_ADDR=blynk-cloud.com
|
||||
set SERV_PORT=80
|
||||
|
||||
REM === Edit lines below only if absolutely sure what you're doing ===
|
||||
|
||||
rem Get command line options
|
||||
set SCRIPTS_PATH=%~dp0
|
||||
|
||||
:loop
|
||||
IF NOT "%1"=="" (
|
||||
IF "%1"=="-c" set COMM_PORT=%2& SHIFT & SHIFT & GOTO :loop
|
||||
IF "%1"=="-b" set COMM_BAUD=%2& SHIFT & SHIFT & GOTO :loop
|
||||
IF "%1"=="-s" set SERV_ADDR=%2& SHIFT & SHIFT & GOTO :loop
|
||||
IF "%1"=="-p" set SERV_PORT=%2& SHIFT & SHIFT & GOTO :loop
|
||||
|
||||
CALL :usage
|
||||
GOTO :eof
|
||||
)
|
||||
|
||||
rem Find ports
|
||||
set PORTS=
|
||||
for /f "tokens=4 delims=: " %%A in ('mode^|findstr "COM[0-9]*:"') do IF not [%%A] == [] set PORTS=!PORTS! %%A
|
||||
set PORTS=!PORTS:~1!
|
||||
|
||||
rem Check port
|
||||
rem Skip check if no ports at all - Windows bug?
|
||||
if not "x%PORTS%"=="x~1" (
|
||||
if "x!PORTS:%COMM_PORT%=!"=="x%PORTS%" (
|
||||
echo %COMM_PORT% not found, or may be busy.
|
||||
set /p COMM_PORT="Select serial port [ %PORTS% ]: "
|
||||
)
|
||||
)
|
||||
|
||||
rem Create exe
|
||||
if not exist "%SCRIPTS_PATH%\com2tcp.exe" (
|
||||
copy "%SCRIPTS_PATH%\com2tcp.bin" "%SCRIPTS_PATH%\com2tcp.exe" > NUL
|
||||
)
|
||||
|
||||
rem Do the job
|
||||
echo Connecting device at %COMM_PORT% to %SERV_ADDR%:%SERV_PORT%...
|
||||
|
||||
rem Try resetting board
|
||||
rem mode %COMM_PORT%:%COMM_BAUD%,N,8,1 >nul
|
||||
|
||||
:restart
|
||||
"%SCRIPTS_PATH%\com2tcp.exe" --baud %COMM_BAUD% --ignore-dsr \\.\%COMM_PORT% %SERV_ADDR% %SERV_PORT%
|
||||
echo Reconnecting in 3s...
|
||||
timeout /T 3
|
||||
goto restart
|
||||
|
||||
|
||||
goto:eof
|
||||
|
||||
:usage
|
||||
echo.
|
||||
echo. This script redirects serial communication to the server.
|
||||
echo.
|
||||
echo. You can specify port, baud rate, and server endpoint like this:
|
||||
echo. blynk-ser.bat -c ^<serial port^> -b ^<baud^> -s ^<server^> -p ^<port^>
|
||||
echo.
|
||||
echo. The defaults are:
|
||||
echo. -c /dev/ttyUSB0 (on Linux)
|
||||
echo. COM1 (on Windows)
|
||||
echo. /dev/tty.usbserial (on OSX)
|
||||
echo. -b 9600
|
||||
echo. -s blynk-cloud.com
|
||||
echo. -p 80
|
||||
echo.
|
||||
echo. If the specified serial port is not found, it will ask to enter another one.
|
||||
echo. The script also tries to reestablish connection if it was lost.
|
||||
goto:eof
|
||||
249
arduino-cli/libraries/Blynk/scripts/blynk-ser.sh
Normal file
249
arduino-cli/libraries/Blynk/scripts/blynk-ser.sh
Normal file
@@ -0,0 +1,249 @@
|
||||
#!/bin/bash
|
||||
# Detect script path
|
||||
pushd `dirname $0` > /dev/null
|
||||
SCRIPTPATH=`pwd`
|
||||
popd > /dev/null
|
||||
|
||||
# === Edit default options to match your need ===
|
||||
|
||||
FROM_TYPE="SER" # SER, TCP
|
||||
TO_TYPE="SSL" # TCP, SSL
|
||||
|
||||
COMM_BAUD=9600
|
||||
SERV_ADDR=blynk-cloud.com
|
||||
SERV_PORT_SSL=443
|
||||
SERV_PORT_TCP=80
|
||||
LSTN_PORT=80
|
||||
|
||||
SRVR_CERT="$SCRIPTPATH/certs/server.crt"
|
||||
CLNT_CERT="$SCRIPTPATH/certs/client.pem"
|
||||
|
||||
# === Edit the lines below only if absolutely sure what you're doing ===
|
||||
|
||||
usage="
|
||||
This script redirects serial communication to the server.
|
||||
|
||||
You can specify port, baud rate, and server endpoint like this:
|
||||
blynk-ser.sh -c <serial port> -b <baud rate> -s <server address> -p <server port>
|
||||
|
||||
The defaults are:
|
||||
-c,--comm single available port (on Linux, OSX)
|
||||
COM1 (on Windows)
|
||||
-b,--baud 9600
|
||||
-s,--server blynk-cloud.com
|
||||
-p,--port 80
|
||||
|
||||
If the specified serial port is not found, it will ask to enter another one.
|
||||
The script also tries to reestablish connection if it was lost.
|
||||
"
|
||||
|
||||
avrdude_warn="Warning: avrdude is running
|
||||
Avoid uploading sketches and running this script at the same time.
|
||||
If you didn't run avrdude, maybe it just stuck. You can kill it using:
|
||||
killall avrdude
|
||||
"
|
||||
|
||||
function detect_conflicts {
|
||||
# Detect if avrdude is running
|
||||
if pgrep avrdude; then echo -n "$avrdude_warn"; fi
|
||||
}
|
||||
|
||||
detect_conflicts
|
||||
|
||||
# Detect socat
|
||||
if ! hash socat 2>/dev/null; then
|
||||
echo "This script uses socat utility, but could not find it."
|
||||
echo
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
echo " Try installing it using: sudo apt-get install socat"
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo " Try installing it using: brew install socat"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Execute getopt
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
ARGS=$(getopt -o hf:c:b:l:t:s:p: -l "help,from:,comm:,baud:,listen:,to:,server:,port:,cert:" -n "blynk-gateway.sh" -- "$@");
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
ARGS=$(getopt hf:c:b:l:t:s:p: $*);
|
||||
fi
|
||||
|
||||
# Bad arguments
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
echo -n "$usage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
eval set -- "$ARGS";
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
shift
|
||||
echo -n "$usage"
|
||||
exit 0
|
||||
;;
|
||||
####
|
||||
-f|--from)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
FROM_TYPE=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-c|--comm)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
COMM_PORT_USER=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-b|--baud)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
COMM_BAUD=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-l|--listen)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
LSTN_PORT=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
####
|
||||
-t|--to)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
TO_TYPE=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-s|--server)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
SERV_ADDR=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-p|--port)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
SERV_PORT_SSL=$1
|
||||
SERV_PORT_TCP=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--cert)
|
||||
shift
|
||||
if [ -n "$1" ]; then
|
||||
SRVR_CERT=$1
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
####
|
||||
--)
|
||||
shift;
|
||||
break;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Construct command
|
||||
GEN_ATTR="-d -d"
|
||||
|
||||
TCP_ATTR="nodelay" #,nonblock=1,rcvtimeo=1,sndtimeo=1
|
||||
SER_ATTR="raw,echo=0,clocal=1,cs8,nonblock=1"
|
||||
|
||||
if [[ "$FROM_TYPE" == "SER" ]]; then
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
COMM_WCARD="/dev/ttyUSB* /dev/ttyACM*"
|
||||
COMM_STTY="-F"
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
COMM_WCARD="/dev/tty.usbserial* /dev/tty.usbmodem*"
|
||||
COMM_STTY="-f"
|
||||
else
|
||||
echo "Can't detect OS type!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMM_FOUND=`ls $COMM_WCARD 2> /dev/null`
|
||||
COMM_QTY=`printf "%s\n" $COMM_FOUND | wc -l`
|
||||
|
||||
if [[ ! "$COMM_PORT_USER" == "" ]]; then
|
||||
COMM_PORT=$COMM_PORT_USER
|
||||
elif [[ "$COMM_QTY" == "1" ]]; then
|
||||
# Select single available port
|
||||
COMM_PORT=$COMM_FOUND
|
||||
else
|
||||
# Ask for serial port interactively
|
||||
echo "$COMM_QTY ports found. You can specify port manually using -c option"
|
||||
echo -n "Select serial port [" $COMM_FOUND "]: "
|
||||
read COMM_PORT
|
||||
fi
|
||||
|
||||
if [ ! -e "$COMM_PORT" ]; then
|
||||
echo "Can't find port: $COMM_PORT"
|
||||
echo "Please specify port manually using -c option"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Resetting device $COMM_PORT..."
|
||||
stty $COMM_STTY $COMM_PORT hupcl
|
||||
# Disable restarting
|
||||
#stty $COMM_STTY $COMM_PORT -hupcl
|
||||
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
FROM_ATTR="FILE:$COMM_PORT,$SER_ATTR,b$COMM_BAUD"
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
FROM_ATTR="GOPEN:$COMM_PORT,$SER_ATTR,ixoff=0,ixon=0,ispeed=$COMM_BAUD,ospeed=$COMM_BAUD,crtscts=0"
|
||||
fi
|
||||
elif [[ "$FROM_TYPE" == "TCP" ]]; then
|
||||
FROM_ATTR="TCP-LISTEN:$LSTN_PORT,reuseaddr,fork,$TCP_ATTR"
|
||||
else
|
||||
echo "$FROM_TYPE is not supported."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$TO_TYPE" == "TCP" ]]; then
|
||||
echo "Warning: Server connection may be insecure!"
|
||||
TO_ATTR="TCP:$SERV_ADDR:$SERV_PORT_TCP,$TCP_ATTR"
|
||||
elif [[ "$TO_TYPE" == "SSL" ]]; then
|
||||
if [ -e "$SRVR_CERT" ]; then
|
||||
TCP_ATTR="cafile=$SRVR_CERT,$TCP_ATTR"
|
||||
else
|
||||
echo "Warning: $SRVR_CERT not found. Skipping server verification (connection may be insecure)!"
|
||||
TCP_ATTR="verify=0,$TCP_ATTR"
|
||||
fi
|
||||
|
||||
if [ -e "$CLNT_CERT" ]; then
|
||||
TCP_ATTR="cert=$CLNT_CERT,$TCP_ATTR"
|
||||
fi
|
||||
|
||||
TO_ATTR="openssl-connect:$SERV_ADDR:$SERV_PORT_SSL,$TCP_ATTR"
|
||||
elif [[ "$TO_TYPE" == "2WAY" ]]; then
|
||||
echo "2WAY is not supported yet."
|
||||
exit 1
|
||||
else
|
||||
echo "$TO_TYPE is not supported."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup exit handler
|
||||
trap "echo Exited!; exit;" SIGINT SIGTERM
|
||||
echo [ Press Ctrl+C to exit ]
|
||||
|
||||
while [ 1 ]; do
|
||||
echo Connecting: "$FROM_ATTR <-> $TO_ATTR"
|
||||
|
||||
socat $GEN_ATTR "$FROM_ATTR" "$TO_ATTR"
|
||||
|
||||
detect_conflicts
|
||||
|
||||
echo Reconnecting in 3s...
|
||||
sleep 3
|
||||
done
|
||||
|
||||
216
arduino-cli/libraries/Blynk/scripts/blynk_ctrl.py
Normal file
216
arduino-cli/libraries/Blynk/scripts/blynk_ctrl.py
Normal file
@@ -0,0 +1,216 @@
|
||||
#!/usr/bin/python
|
||||
'''
|
||||
examples:
|
||||
|
||||
Simple write operations:
|
||||
python blynk_ctrl.py --token=909fa1... -dw 5 1
|
||||
python blynk_ctrl.py --token=909fa1... -aw 9 134
|
||||
python blynk_ctrl.py --token=909fa1... -vw 1 value
|
||||
|
||||
Simple read operations:
|
||||
python blynk_ctrl.py --token=909fa1... -vr 3
|
||||
|
||||
Using named pins (like A1, supported by some boards):
|
||||
python blynk_ctrl.py --token=909fa1... -dw A1 1
|
||||
|
||||
Multiple operations at once:
|
||||
python blynk_ctrl.py --token=909fa1... -aw 9 100 -dw 8 123 -vw 9 hello
|
||||
|
||||
Sending arrays to virtual pins:
|
||||
python blynk_ctrl.py --token=909fa1... -vw 1 "value 1" "value 2"
|
||||
|
||||
Do simple animations (delay commands):
|
||||
python blynk_ctrl.py --token=909fa1... --delayAll=0.2 -aw 9 0 -aw 9 50 -aw 9 100 -aw 9 150 -aw 9 200 -aw 9 255
|
||||
python blynk_ctrl.py --token=909fa1... -aw 9 10 --delay=0.5 -aw 9 50 --delay=2.0 -aw 9 100
|
||||
|
||||
Author: Volodymyr Shymanskyy
|
||||
License: The MIT license
|
||||
'''
|
||||
import socket, struct
|
||||
import sys, time
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawTextHelpFormatter,
|
||||
description = 'This script uses Bridge feature to control another device from the command line.',
|
||||
epilog = __doc__
|
||||
)
|
||||
|
||||
def opAction(op, expand=False, minargs=1):
|
||||
class _action(argparse.Action):
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
if len(values) < minargs:
|
||||
raise argparse.ArgumentError(self, "not enough parameters")
|
||||
|
||||
if expand:
|
||||
pin = values[0]
|
||||
for v in values[1:]:
|
||||
namespace.ops.append([op, pin, v])
|
||||
else:
|
||||
namespace.ops.append([op]+values)
|
||||
|
||||
return _action
|
||||
|
||||
parser.add_argument('-t', '--token', action="store", dest='token', help='auth token of the controller')
|
||||
|
||||
parser.add_argument('-dw', '--digitalWrite', action=opAction('dw', True, 2), nargs='*', metavar=('PIN', 'VAL'))
|
||||
parser.add_argument('-aw', '--analogWrite', action=opAction('aw', True, 2), nargs='*', metavar=('PIN', 'VAL'))
|
||||
parser.add_argument('-vw', '--virtualWrite', action=opAction('vw', False, 2), nargs='*', metavar=('PIN', 'VAL'))
|
||||
|
||||
parser.add_argument('-dr', '--digitalRead', action=opAction('dr'), nargs=1, metavar='PIN')
|
||||
parser.add_argument('-ar', '--analogRead', action=opAction('ar'), nargs=1, metavar='PIN')
|
||||
parser.add_argument('-vr', '--virtualRead', action=opAction('vr'), nargs=1, metavar='PIN')
|
||||
|
||||
parser.add_argument('--delay', action=opAction('delay'), nargs=1, type=float, metavar='SECs')
|
||||
|
||||
parser.add_argument('--delayAll', action="store", dest='delayAll', type=float, metavar='SECs', help='delay between all operations')
|
||||
|
||||
parser.add_argument('-s', '--server', action='store', dest='server', help='server address or domain name')
|
||||
parser.add_argument('-p', '--port', action="store", dest='port', type=int, help='server port')
|
||||
parser.add_argument('--target', action="store", dest='target', metavar="TOKEN", help='auth token of the target device')
|
||||
parser.add_argument('--dump', action="store_true", dest='dump', help='dump communication')
|
||||
|
||||
parser.set_defaults(
|
||||
server='blynk-cloud.com',
|
||||
port=80,
|
||||
dump=False,
|
||||
nodelay=True,
|
||||
bridge=64,
|
||||
ops = []
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#import pprint
|
||||
#pprint.pprint(args)
|
||||
#sys.exit()
|
||||
|
||||
logging.basicConfig(level=logging.INFO,
|
||||
format='%(asctime)s %(message)s')
|
||||
log = logging.getLogger("blynk_ctrl")
|
||||
|
||||
if not args.target and args.token:
|
||||
args.target = args.token
|
||||
|
||||
if not args.token:
|
||||
parser.error("token not specified!")
|
||||
|
||||
if args.dump:
|
||||
log.setLevel(logging.DEBUG)
|
||||
|
||||
# Helpers
|
||||
|
||||
hdr = struct.Struct("!BHH")
|
||||
|
||||
class MsgType:
|
||||
RSP = 0
|
||||
LOGIN = 2
|
||||
PING = 6
|
||||
BRIDGE = 15
|
||||
HW_SYNC = 16
|
||||
HW_INFO = 17
|
||||
HW = 20
|
||||
|
||||
|
||||
class MsgStatus:
|
||||
OK = 200
|
||||
|
||||
def compose(msg_type, *args):
|
||||
# Convert params to string and join using \0
|
||||
data = "\0".join(map(str, args))
|
||||
msg_id = genMsgId()
|
||||
msg_len = len(data)
|
||||
log.debug(" < %2d,%2d,%2d : %s", msg_type, msg_id, msg_len, "=".join(map(str, args)))
|
||||
return hdr.pack(msg_type, msg_id, msg_len) + data
|
||||
|
||||
static_msg_id = 0
|
||||
def genMsgId():
|
||||
global static_msg_id
|
||||
static_msg_id += 1
|
||||
return static_msg_id
|
||||
|
||||
def receive(sock, length):
|
||||
d = []
|
||||
l = 0
|
||||
while l < length:
|
||||
r = ''
|
||||
try:
|
||||
r = sock.recv(length-l)
|
||||
except socket.timeout:
|
||||
continue
|
||||
if not r:
|
||||
return ''
|
||||
d.append(r)
|
||||
l += len(r)
|
||||
return ''.join(d)
|
||||
|
||||
# Main code
|
||||
try:
|
||||
conn = socket.create_connection((args.server, args.port), 3)
|
||||
except:
|
||||
log.error("Can't connect to %s:%d", args.server, args.port)
|
||||
sys.exit(1)
|
||||
|
||||
if args.nodelay:
|
||||
conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||
|
||||
# Authenticate
|
||||
conn.sendall(compose(MsgType.LOGIN, args.token))
|
||||
data = receive(conn, hdr.size)
|
||||
if not data:
|
||||
log.error("Login timeout")
|
||||
sys.exit(1)
|
||||
|
||||
msg_type, msg_id, msg_status = hdr.unpack(data)
|
||||
if msg_type != MsgType.RSP or msg_status != MsgStatus.OK:
|
||||
log.error("Login failed: %d,%d,%d", msg_type, msg_id, msg_status)
|
||||
sys.exit(1)
|
||||
|
||||
def do_read(cmd, pin):
|
||||
conn.sendall(compose(MsgType.HW_SYNC, cmd, pin))
|
||||
while True:
|
||||
data = receive(conn, hdr.size)
|
||||
if not data:
|
||||
log.warning("Data read timeout")
|
||||
sys.exit(1)
|
||||
|
||||
msg_type, msg_id, msg_len = hdr.unpack(data)
|
||||
if msg_type == MsgType.RSP:
|
||||
log.debug(" > %2d,%2d : status %2d", msg_type, msg_id, msg_len)
|
||||
elif msg_type == MsgType.HW or msg_type == MsgType.BRIDGE:
|
||||
data = receive(conn, msg_len).split("\0")
|
||||
log.debug(" > %2d,%2d,%2d : %s", msg_type, msg_id, msg_len, "=".join(data))
|
||||
if data[0] == cmd[0]+'w' and data[1] == pin:
|
||||
data = data[2:]
|
||||
if len(data) > 1:
|
||||
print data
|
||||
else:
|
||||
print data[0]
|
||||
break
|
||||
|
||||
for op in args.ops:
|
||||
cmd = op[0]
|
||||
op = op[1:]
|
||||
if cmd == 'dw':
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "i", args.target))
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "dw", op[0], op[1]))
|
||||
elif cmd == 'aw':
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "i", args.target))
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "aw", op[0], op[1]))
|
||||
elif cmd == 'vw':
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "i", args.target))
|
||||
conn.sendall(compose(MsgType.BRIDGE, args.bridge, "vw", op[0], *op[1:]))
|
||||
elif cmd == 'dr' or cmd == 'ar' or cmd == 'vr':
|
||||
do_read(cmd, op[0])
|
||||
elif cmd == 'delay':
|
||||
time.sleep(op[0])
|
||||
else:
|
||||
log.warning("Wrong command:", cmd)
|
||||
|
||||
if args.delayAll:
|
||||
time.sleep(args.delayAll)
|
||||
|
||||
# Finished
|
||||
|
||||
conn.close()
|
||||
23
arduino-cli/libraries/Blynk/scripts/certs/server.crt
Normal file
23
arduino-cli/libraries/Blynk/scripts/certs/server.crt
Normal file
@@ -0,0 +1,23 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID5TCCAs2gAwIBAgIJAIHSnb+cv4ECMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
|
||||
VQQGEwJVQTENMAsGA1UECAwES3lpdjENMAsGA1UEBwwES3lpdjELMAkGA1UECgwC
|
||||
SVQxEzARBgNVBAsMCkJseW5rIEluYy4xGDAWBgNVBAMMD2JseW5rLWNsb3VkLmNv
|
||||
bTEfMB0GCSqGSIb3DQEJARYQZG1pdHJpeUBibHluay5jYzAeFw0xNjAzMTcxMTU4
|
||||
MDdaFw0yMTAzMTYxMTU4MDdaMIGIMQswCQYDVQQGEwJVQTENMAsGA1UECAwES3lp
|
||||
djENMAsGA1UEBwwES3lpdjELMAkGA1UECgwCSVQxEzARBgNVBAsMCkJseW5rIElu
|
||||
Yy4xGDAWBgNVBAMMD2JseW5rLWNsb3VkLmNvbTEfMB0GCSqGSIb3DQEJARYQZG1p
|
||||
dHJpeUBibHluay5jYzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALso
|
||||
bhbXQuNlzYBFa9h9pd69n43yrGTL4Ba6k5Q1zDwY9HQbMdfC5ZfnCkqT7Zf+R5MO
|
||||
RW0Q9nLsFNLJkwKnluRCYGyUES8NAmDLQBbZoVc8mv9K3mIgAQvGyY2LmKak5GSI
|
||||
V0PC3x+iN03xU2774+Zi7DaQd7vTl/9RGk8McyHe/s5Ikbe14bzWcY9ZV4PKgCck
|
||||
p1chbmLhSfGbT3v64sL8ZbIppQk57/JgsZMrVpjExvxQPZuJfWbtoypPfpYO+O8l
|
||||
1szaMlTEPIZVMoYi9uE+DnOlhzJFn6Ac4FMrDzJXzMmCweSX3IxguvXALeKhUHQJ
|
||||
+VP3G6Q3pkZRVKz+5XsCAwEAAaNQME4wHQYDVR0OBBYEFJtqtI62Io66cZgiTR5L
|
||||
A5Tl5m+xMB8GA1UdIwQYMBaAFJtqtI62Io66cZgiTR5LA5Tl5m+xMAwGA1UdEwQF
|
||||
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAKphjtEOGs7oC3S87+AUgIw4gFNOuv+L
|
||||
C98/l47OD6WtsqJKvCZ1lmKxY5aIro9FBPk8ktCOsbwEjE+nyr5wul+6CLFr+rnv
|
||||
7OHYGwLpjoz+rZgYJiQ61E1m0AZ4y9Fyd+D90HW6247vrBXyEiUXOhN/oDDVfDQA
|
||||
eqmNBx1OqWel81D3tA7zPMA7vUItyWcFIXNjOCP+POy7TMxZuhuPMh5bVu+/cthl
|
||||
/Q9u/Z2lKl4CWV0Ivt2BtlN6iefva0e2AP/As+gfwjxrb0t11zSILLNJ+nxRIwg+
|
||||
k4MGb1zihKbIXUzsjslONK4FY5rlQUSwKJgEAVF0ClxB4g6dECm0ckc=
|
||||
-----END CERTIFICATE-----
|
||||
BIN
arduino-cli/libraries/Blynk/scripts/com2tcp.bin
Normal file
BIN
arduino-cli/libraries/Blynk/scripts/com2tcp.bin
Normal file
Binary file not shown.
Reference in New Issue
Block a user