adding RAK8212 support

This commit is contained in:
Gordon Williams 2018-08-01 12:51:58 +01:00
parent 662017ab8d
commit 62317d9490
9 changed files with 308 additions and 9 deletions

View File

@ -48,6 +48,7 @@ env:
- BOARD=THINGY52 DFU_UPDATE_BUILD=1
- BOARD=STM32L496GDISCOVERY
- BOARD=RAK8211
- BOARD=RAK8212
script: make

View File

@ -1,7 +1,7 @@
#!/bin/false
# This file is part of Espruino, a JavaScript interpreter for Microcontrollers
#
# Copyright (C) 2013 Gordon Williams <gw@pur3.co.uk>
# Copyright (C) 2018 Gordon Williams <gw@pur3.co.uk>
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
@ -22,7 +22,7 @@ import pinutils;
info = {
'name' : "iTracker RAK8211",
#https://github.com/RAKWireless/ITRACKER-Arduino-SDK
'link' : [ "http://docs.rakwireless.com/en/RAK8211/Hardware%20Design/RAK8211-G%20Datasheet%20V1.0.pdf" ],
'link' : [ "http://www.rakwireless.com/en/download/Cellular/RAK8211" ],
'espruino_page_link' : 'RAK8211',
'default_console' : "EV_SERIAL1",
'default_console_tx' : "D29",
@ -150,8 +150,7 @@ def get_pins():
pinutils.findpin(pins, "PD19", True)["functions"]["LIS3DH_SDA"]=0;
pinutils.findpin(pins, "PD25", True)["functions"]["LIS3DH_INT1"]=0;
pinutils.findpin(pins, "PD27", True)["functions"]["LIS3DH_INT2"]=0;
pinutils.findpin(pins, "PD26", True)["functions"]["LIS3DH_RES"]=0;
pinutils.findpin(pins, "PD21", True)["functions"]["OPT_SDA"]=0;
pinutils.findpin(pins, "PD26", True)["functions"]["OPT_SDA"]=0;
pinutils.findpin(pins, "PD23", True)["functions"]["OPT_SCL"]=0;
pinutils.findpin(pins, "PD22", True)["functions"]["OPT_INT"]=0;

164
boards/RAK8212.py Normal file
View File

@ -0,0 +1,164 @@
#!/bin/false
# This file is part of Espruino, a JavaScript interpreter for Microcontrollers
#
# Copyright (C) 2018 Gordon Williams <gw@pur3.co.uk>
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# ----------------------------------------------------------------------------------------
# This file contains information for a specific board - the available pins, and where LEDs,
# Buttons, and other in-built peripherals are. It is used to build documentation as well
# as various source and header files for Espruino.
# ----------------------------------------------------------------------------------------
import pinutils;
# Schematic http://docs.rakwireless.com/en/Cellular/RAK8212/Hardware%20Specification/RAK8212_iTRACKER_BG96_V30_20180322.pdf
info = {
'name' : "iTracker RAK8212",
#https://github.com/RAKWireless/ITRACKER-Arduino-SDK
'link' : [ "http://www.rakwireless.com/en/download/Cellular/RAK8212" ],
'espruino_page_link' : 'RAK8212',
'default_console' : "EV_SERIAL1",
'default_console_tx' : "D29",
'default_console_rx' : "D28",
'default_console_baudrate' : "9600",
'variables' : 2500, # How many variables are allocated for Espruino to use. RAM will be overflowed if this number is too high and code won't compile.
'bootloader' : 1,
'binary_name' : 'espruino_%v_RAK8212.hex',
'build' : {
'optimizeflags' : '-Os',
'libraries' : [
'BLUETOOTH',
'NET'
],
'makefile' : [
'DEFINES+=-DCONFIG_GPIO_AS_PINRESET', # Allow the reset pin to work
'DEFINES+=-DCONFIG_NFCT_PINS_AS_GPIOS', # Don't use NFC - the pins are used for GPS
'DEFINES+=-DHAL_NFC_ENGINEERING_BC_FTPAN_WORKAROUND=1', # Looks like proper production nRF52s had this issue
'DEFINES+=-DBLUETOOTH_NAME_PREFIX=\'"iTracker"\'',
'DFU_PRIVATE_KEY=targets/nrf5x_dfu/dfu_private_key.pem',
'DFU_SETTINGS=--application-version 0xff --hw-version 52 --sd-req 0x8C',
'JSMODULESOURCES += libs/js/AT.min.js',
'JSMODULESOURCES += libs/js/GPS.min.js',
'JSMODULESOURCES += libs/js/BME280.min.js',
'JSMODULESOURCES += libs/js/LIS2MDL.min.js',
'JSMODULESOURCES += libs/js/LIS3DH.min.js',
'JSMODULESOURCES += libs/js/OPT3001.min.js',
# 'JSMODULESOURCES += libs/js/UG96.min.js',
# 'JSMODULESOURCES += libs/js/ATSMS.min.js',
# 'JSMODULESOURCES += libs/js/QuectelM35.min.js',
'JSMODULESOURCES += iTracker:libs/js/rak/RAK8212.min.js'
]
}
};
chip = {
'part' : "NRF52832",
'family' : "NRF52",
'package' : "QFN48",
'ram' : 64,
'flash' : 512,
'speed' : 64,
'usart' : 3,
'spi' : 3,
'i2c' : 2,
'adc' : 1,
'dac' : 0,
'saved_code' : {
'address' : ((118 - 3) * 4096), # Bootloader takes pages 120-127, FS takes 118-119
'page_size' : 4096,
'pages' : 3,
'flash_available' : 512 - ((31 + 8 + 1 + 3)*4) # Softdevice uses 31 pages of flash, bootloader 8, FS 1, code 3. Each page is 4 kb.
},
};
devices = {
'LED1' : { 'pin' : 'D12' }, # Pin negated in software
'BTN1' : { 'pin' : 'D30', 'pinstate' : 'IN_PULLDOWN' },
'GPRS' : {'pin_tx' : 'D12', 'pin_rx' : 'D20', 'pin_reset' : 'D14', 'pin_pwrkey' : 'D15', 'pin_pwron' : 'D6'},
'GPS' : {'pin_tx' : 'D9', 'pin_rx' : 'D8', 'pin_standby' : 'D7', 'pin_pwron' : 'D10', 'pin_reset' : 'D31'},
'BME' : {'pin_cs' : 'D2', 'pin_sdi' : 'D3', 'pin_sck': 'D4', 'pin_sdo' : 'D5'},
'LIS2MDL' : {'pin_scl' : 'D11', 'pin_sda': 'D13', 'pin_int' : 'D16'},
'LIS3DH' : {'pin_scl' : 'D18', 'pin_sda' : 'D19', 'pin_int1' : 'D25', 'pin_res' : 'D26', 'pin_int2' : 'D27'},
'OPT' : {'pin_sda' : '21', 'pin_scl' : 'D23', 'pin_int' : 'D22'},
# Pin D22 is used for clock when driving neopixels - as not specifying a pin seems to break things
};
# left-right, or top-bottom order
board = {
'right' : [ 'D21', '3V', 'GND', 'D30', '',
'GND', '3V', 'D29', 'D28', '',
'3V', 'SWDIO', 'SWDCLK', 'GND' ],
'_hide_not_on_connectors' : True,
'_notes' : {
'D21' : "Also RESET if configured",
'D30' : "Labelled TILT_DOUT",
'D29' : "Labelled SENSOR_DOUT2",
'D28' : "Labelled SENSOR_DOUT1"
}
};
board["_css"] = """
#board {
width: 480px;
height: 526px;
top: 0px;
left : 0px;
background-image: url(img/RAK8212.png);
}
#boardcontainer {
height: 506px;
}
#right {
top: 59px;
left: 480px;
}
.rightpin {
height: 26px;
}
""";
def get_pins():
pins = pinutils.generate_pins(0,31) # 32 General Purpose I/O Pins.
# Software negation LED1
pinutils.findpin(pins, "PD12", True)["functions"]["NEGATED"]=0;
# Add pin functions
pinutils.findpin(pins, "PD0", True)["functions"]["XL1"]=0;
pinutils.findpin(pins, "PD1", True)["functions"]["XL2"]=0;
pinutils.findpin(pins, "PD28", True)["functions"]["ADC1_IN4"]=0;
pinutils.findpin(pins, "PD7", True)["functions"]["LTE_RX"]=0;
pinutils.findpin(pins, "PD8", True)["functions"]["LTE_CTS"]=0;
pinutils.findpin(pins, "PD9", True)["functions"]["LTE_TX"]=0;
pinutils.findpin(pins, "PD10", True)["functions"]["LTE_RTS"]=0;
pinutils.findpin(pins, "PD28", True)["functions"]["USART1_TX"]=0;
pinutils.findpin(pins, "PD29", True)["functions"]["USART1_RX"]=0;
pinutils.findpin(pins, "PD14", True)["functions"]["GPRS_RESET"]=0;
pinutils.findpin(pins, "PD15", True)["functions"]["GPRS_PWRKEY"]=0;
pinutils.findpin(pins, "PD6", True)["functions"]["GPRS_PWN_ON"]=0;
pinutils.findpin(pins, "PD31", True)["functions"]["GPS_RESET"]=0;
pinutils.findpin(pins, "PD2", True)["functions"]["BME_CS"]=0;
pinutils.findpin(pins, "PD3", True)["functions"]["BME_SDI"]=0;
pinutils.findpin(pins, "PD4", True)["functions"]["BME_SCK"]=0;
pinutils.findpin(pins, "PD5", True)["functions"]["BME_SDO"]=0;
pinutils.findpin(pins, "PD11", True)["functions"]["LIS2MDL_SCL"]=0;
pinutils.findpin(pins, "PD13", True)["functions"]["LIS2MDL_SDA"]=0;
pinutils.findpin(pins, "PD16", True)["functions"]["LIS2MDL_INT"]=0;
pinutils.findpin(pins, "PD18", True)["functions"]["LIS3DH_SCL"]=0;
pinutils.findpin(pins, "PD19", True)["functions"]["LIS3DH_SDA"]=0;
pinutils.findpin(pins, "PD25", True)["functions"]["LIS3DH_INT1"]=0;
pinutils.findpin(pins, "PD27", True)["functions"]["LIS3DH_INT2"]=0;
pinutils.findpin(pins, "PD26", True)["functions"]["OPT_SDA"]=0;
pinutils.findpin(pins, "PD23", True)["functions"]["OPT_SCL"]=0;
pinutils.findpin(pins, "PD22", True)["functions"]["OPT_INT"]=0;
# everything is non-5v tolerant
for pin in pins:
pin["functions"]["3.3"]=0;
#The boot/reset button will function as a reset button in normal operation. Pin reset on PD21 needs to be enabled on the nRF52832 device for this to work.
return pins

BIN
boards/img/RAK8212.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

View File

@ -129,6 +129,11 @@ exports.setCellOn = function(isOn, callback) {
PINS.PWR_GPRS_ON.reset(); // turn power off.
if (callback) setTimeout(callback,1000);
}
}
};
/// Set whether the BQ24210 should charge the battery (default is yes)
exports.setCharging = function(isCharging) {
PINS.BQ_EN.write(!isCharging);
};

View File

@ -1,4 +1,4 @@
var g=D2,h=D3,k=D4,l=D5,d=D6,m=D8,n=D9,e=D10,p=D11,q=D12,r=D13,f=D15,t=D16,u=D18,v=D19,w=D20,x=D26,y=D22,z=D23,A=D25;exports.setGPSOn=function(c,b){Serial1.removeAllListeners();delete this.GPS;if(c)return Serial1.setup(9600,{tx:m,rx:n}),e.set(),this.GPS=require("GPS").connect(Serial1,b);e.reset()};exports.setEnvOn=function(c,b){this.BME280&&this.BME280.setPower(!1);delete this.BME280;if(c){var a=new SPI;a.setup({miso:l,mosi:h,sck:k});b&&setTimeout(b,100,this.BME280);return this.BME280=
require("BME280").connectSPI(a,g)}};exports.setMagOn=function(c,b){this.LIS2MDL&&this.LIS2MDL.off();delete this.LIS2MDL;if(c){var a=new I2C;a.setup({sda:r,scl:p});b&&setTimeout(b,100,this.LIS2MDL);return this.LIS2MDL=require("LIS2MDL").connectI2C(a,{"int":t})}};exports.setAccelOn=function(c,b){this.LIS3DH&&this.LIS3DH.off();delete this.LIS3DH;if(c){var a=new I2C;a.setup({sda:v,scl:u});b&&setTimeout(b,100,this.LIS3DH);return this.LIS3DH=require("LIS3DH").connectI2C(a,{"int":A})}};exports.setOptoOn=
function(c,b){this.OPT3001&&this.OPT3001.off();delete this.OPT3001;if(c){var a=new I2C;a.setup({sda:x,scl:z,bitrate:4E5});b&&setTimeout(b,1E3,this.OPT3001);return this.OPT3001=require("OPT3001").connectI2C(a,{"int":y})}};exports.setCellOn=function(c,b){if(c)return(new Promise(function(a){Serial1.removeAllListeners();Serial1.on("data",function(a){});Serial1.setup(115200,{tx:q,rx:w});d.reset();setTimeout(a,200)})).then(function(){d.set();return new Promise(function(a){setTimeout(a,200)})}).then(function(){f.set();
return new Promise(function(a){setTimeout(a,2E3)})}).then(function(){f.reset();return new Promise(function(a){setTimeout(a,5E3)})}).then(function(){Serial1.removeAllListeners();b&&setTimeout(b,10,Serial1)});d.reset();b&&setTimeout(b,1E3)}
var g=D2,h=D3,k=D4,l=D5,d=D6,m=D8,n=D9,e=D10,p=D11,q=D12,r=D13,f=D15,t=D16,u=D17,v=D18,w=D19,x=D20,y=D26,z=D22,A=D23,B=D25;exports.setGPSOn=function(c,b){Serial1.removeAllListeners();delete this.GPS;if(c)return Serial1.setup(9600,{tx:m,rx:n}),e.set(),this.GPS=require("GPS").connect(Serial1,b);e.reset()};exports.setEnvOn=function(c,b){this.BME280&&this.BME280.setPower(!1);delete this.BME280;if(c){var a=new SPI;a.setup({miso:l,mosi:h,sck:k});b&&setTimeout(b,100,this.BME280);return this.BME280=
require("BME280").connectSPI(a,g)}};exports.setMagOn=function(c,b){this.LIS2MDL&&this.LIS2MDL.off();delete this.LIS2MDL;if(c){var a=new I2C;a.setup({sda:r,scl:p});b&&setTimeout(b,100,this.LIS2MDL);return this.LIS2MDL=require("LIS2MDL").connectI2C(a,{"int":t})}};exports.setAccelOn=function(c,b){this.LIS3DH&&this.LIS3DH.off();delete this.LIS3DH;if(c){var a=new I2C;a.setup({sda:w,scl:v});b&&setTimeout(b,100,this.LIS3DH);return this.LIS3DH=require("LIS3DH").connectI2C(a,{"int":B})}};exports.setOptoOn=
function(c,b){this.OPT3001&&this.OPT3001.off();delete this.OPT3001;if(c){var a=new I2C;a.setup({sda:y,scl:A,bitrate:4E5});b&&setTimeout(b,1E3,this.OPT3001);return this.OPT3001=require("OPT3001").connectI2C(a,{"int":z})}};exports.setCellOn=function(c,b){if(c)return(new Promise(function(a){Serial1.removeAllListeners();Serial1.on("data",function(a){});Serial1.setup(115200,{tx:q,rx:x});d.reset();setTimeout(a,200)})).then(function(){d.set();return new Promise(function(a){setTimeout(a,200)})}).then(function(){f.set();
return new Promise(function(a){setTimeout(a,2E3)})}).then(function(){f.reset();return new Promise(function(a){setTimeout(a,5E3)})}).then(function(){Serial1.removeAllListeners();b&&setTimeout(b,10,Serial1)});d.reset();b&&setTimeout(b,1E3)};exports.setCharging=function(c){u.write(!c)}

123
libs/js/rak/RAK8212.js Normal file
View File

@ -0,0 +1,123 @@
/*
http://www.discoverytelecom.eu/upload/iblock/7c7/m35_at_command.pdf
https://www.hobbielektronika.hu/forum/getfile.php?id=203810
*/
var PINS = {
BME_CS : D2,
BME_SDI : D3,
BME_SCK : D4,
BME_SDO : D5,
PWR_GPRS_ON : D6, // 1=on, 0=off
LTE_RXD : D7,
LTE_CTS : D8,
LTE_TXD : D9,
LTE_RTS : D10,
LIS2MDL_SCL : D11,
LIS2MDL_SDA : D13,
GPRS_RESET : D14,
GPRS_PWRKEY : D15,
LIS2MDL_INT : D16,
BQ_EN : D17,
LIS3DH_SCL : D18,
LIS3DH_SDA : D19,
TP5 : D20, // test point
// D21 is reset
OPT_SDA : D26,
OPT_INT : D22,
OPT_SCL : D23,
LIS3DH_INT1 : D25,
LIS3DH_RES : D26,
LIS3DH_INT2 : D27,
SENSOR_DOUT1 : D28,
SENSOR_DOUT2 : D29,
TILT_DOUT : D30,
GPS_RESET : D31 // 1=normal, 0=reset (internal pullup)
};
/// Returns BME280 instance. callback when initialised. Call 'getData' to get the information
exports.setEnvOn = function(isOn, callback) {
if (this.BME280) this.BME280.setPower(false);
delete this.BME280;
if (isOn) {
var spi = new SPI();
spi.setup({miso : PINS.BME_SDO, mosi : PINS.BME_SDI, sck: PINS.BME_SCK });
if (callback) setTimeout(callback, 100, this.BME280); // wait for first reading
return this.BME280 = require("BME280").connectSPI(spi, PINS.BME_CS);
}
};
/// Returns a LIS2MDL instance. callback when initialised. Then use 'read' to get data
exports.setMagOn = function(isOn, callback) {
if (this.LIS2MDL) this.LIS2MDL.off();
delete this.LIS2MDL;
if (isOn) {
var i2c = new I2C();
i2c.setup({sda:PINS.LIS2MDL_SDA, scl:PINS.LIS2MDL_SCL});
if (callback) setTimeout(callback, 100, this.LIS2MDL); // wait for first reading
// {int:pin} isn't used yet, but at some point the module might include support
return this.LIS2MDL = require("LIS2MDL").connectI2C(i2c, { int : PINS.LIS2MDL_INT });
}
};
/// Returns a LIS3DH instance. callback when initialised. Then use 'read' to get data
exports.setAccelOn = function(isOn, callback) {
if (this.LIS3DH) this.LIS3DH.off();
delete this.LIS3DH;
if (isOn) {
var i2c = new I2C();
i2c.setup({sda:PINS.LIS3DH_SDA, scl:PINS.LIS3DH_SCL});
if (callback) setTimeout(callback, 100, this.LIS3DH); // wait for first reading
// {int:pin} isn't used yet, but at some point the module might include support
return this.LIS3DH = require("LIS3DH").connectI2C(i2c, { int : PINS.LIS3DH_INT1});
}
};
/// Returns a OPT3001 instance. callback when initialised. Then use 'read' to get data
exports.setOptoOn = function(isOn, callback) {
if (this.OPT3001) this.OPT3001.off();
delete this.OPT3001;
if (isOn) {
var i2c = new I2C();
i2c.setup({sda:PINS.OPT_SDA, scl:PINS.OPT_SCL,bitrate:400000});
if (callback) setTimeout(callback, 1000, this.OPT3001); // wait for first reading
// {int:pin} isn't used yet, but at some point the module might include support
return this.OPT3001 = require("OPT3001").connectI2C(i2c, { int : PINS.OPT_INT });
}
};
// Turn cell connectivity on - will take around 8 seconds. Calls the `callback(usart)` when done. You then need to connect either SMS or QuectelM35 to the serial device `usart`
exports.setCellOn = function(isOn, callback) {
if (isOn) {
var that=this;
return new Promise(function(resolve) {
Serial1.removeAllListeners();
Serial1.on('data', function(x) {}); // suck up any data that gets transmitted from the modem as it boots (RDY, etc)
Serial1.setup(115200,{tx:PINS.LTE_TXD, rx:PINS.LTE_RXD, cts:PINS.LTE_RTS});
PINS.PWR_GPRS_ON.reset();
setTimeout(resolve,200);
}).then(function() {
PINS.PWR_GPRS_ON.set();
return new Promise(function(resolve){setTimeout(resolve,200);});
}).then(function() {
PINS.GPRS_PWRKEY.set();
return new Promise(function(resolve){setTimeout(resolve,2000);});
}).then(function() {
PINS.GPRS_PWRKEY.reset();
return new Promise(function(resolve){setTimeout(resolve,5000);});
}).then(function() {
Serial1.removeAllListeners();
if (callback) setTimeout(callback,10,Serial1);
});
} else {
PINS.PWR_GPRS_ON.reset(); // turn power off.
if (callback) setTimeout(callback,1000);
}
};
/// Set whether the BQ24210 should charge the battery (default is yes)
exports.setCharging = function(isCharging) {
PINS.BQ_EN.write(!isCharging);
};

5
libs/js/rak/RAK8212.min.js vendored Normal file
View File

@ -0,0 +1,5 @@
var a={BME_CS:D2,BME_SDI:D3,BME_SCK:D4,BME_SDO:D5,PWR_GPRS_ON:D6,LTE_RXD:D7,LTE_CTS:D8,LTE_TXD:D9,LTE_RTS:D10,LIS2MDL_SCL:D11,LIS2MDL_SDA:D13,GPRS_RESET:D14,GPRS_PWRKEY:D15,LIS2MDL_INT:D16,BQ_EN:D17,LIS3DH_SCL:D18,LIS3DH_SDA:D19,TP5:D20,OPT_SDA:D26,OPT_INT:D22,OPT_SCL:D23,LIS3DH_INT1:D25,LIS3DH_RES:D26,LIS3DH_INT2:D27,SENSOR_DOUT1:D28,SENSOR_DOUT2:D29,TILT_DOUT:D30,GPS_RESET:D31};exports.setEnvOn=function(d,b){this.BME280&&this.BME280.setPower(!1);delete this.BME280;if(d){var c=new SPI;
c.setup({miso:a.BME_SDO,mosi:a.BME_SDI,sck:a.BME_SCK});b&&setTimeout(b,100,this.BME280);return this.BME280=require("BME280").connectSPI(c,a.BME_CS)}};exports.setMagOn=function(d,b){this.LIS2MDL&&this.LIS2MDL.off();delete this.LIS2MDL;if(d){var c=new I2C;c.setup({sda:a.LIS2MDL_SDA,scl:a.LIS2MDL_SCL});b&&setTimeout(b,100,this.LIS2MDL);return this.LIS2MDL=require("LIS2MDL").connectI2C(c,{"int":a.LIS2MDL_INT})}};exports.setAccelOn=function(d,b){this.LIS3DH&&this.LIS3DH.off();delete this.LIS3DH;if(d){var c=
new I2C;c.setup({sda:a.LIS3DH_SDA,scl:a.LIS3DH_SCL});b&&setTimeout(b,100,this.LIS3DH);return this.LIS3DH=require("LIS3DH").connectI2C(c,{"int":a.LIS3DH_INT1})}};exports.setOptoOn=function(d,b){this.OPT3001&&this.OPT3001.off();delete this.OPT3001;if(d){var c=new I2C;c.setup({sda:a.OPT_SDA,scl:a.OPT_SCL,bitrate:4E5});b&&setTimeout(b,1E3,this.OPT3001);return this.OPT3001=require("OPT3001").connectI2C(c,{"int":a.OPT_INT})}};exports.setCellOn=function(d,b){if(d)return(new Promise(function(c){Serial1.removeAllListeners();
Serial1.on("data",function(a){});Serial1.setup(115200,{tx:a.LTE_RXD,rx:a.LTE_TXD,cts:a.LTS_RTS});a.PWR_GPRS_ON.reset();setTimeout(c,200)})).then(function(){a.PWR_GPRS_ON.set();return new Promise(function(a){setTimeout(a,200)})}).then(function(){a.GPRS_PWRKEY.set();return new Promise(function(a){setTimeout(a,2E3)})}).then(function(){a.GPRS_PWRKEY.reset();return new Promise(function(a){setTimeout(a,5E3)})}).then(function(){Serial1.removeAllListeners();b&&setTimeout(b,10,Serial1)});a.PWR_GPRS_ON.reset();
b&&setTimeout(b,1E3)};exports.setCharging=function(d){a.BQ_EN.write(!d)}

View File

@ -6,6 +6,7 @@ cd `dirname $0`
wget https://www.espruino.com/modules/AT.min.js -O AT.min.js
#wget https://www.espruino.com/modules/QuectelM35.min.js -O QuectelM35.min.js
#wget https://www.espruino.com/modules/ATSMS.min.js -O ATSMS.min.js
#wget https://www.espruino.com/modules/UG96.min.js -O UG96.min.js
wget https://www.espruino.com/modules/GPS.min.js -O GPS.min.js
wget https://www.espruino.com/modules/graphical_menu.min.js -O graphical_menu.min.js
wget https://www.espruino.com/modules/BME280.min.js -O BME280.min.js
@ -23,4 +24,5 @@ wget https://www.espruino.com/modules/BH1745.min.js -O BH1745.min.js
wget https://www.espruino.com/modules/EspruinoWiFi.min.js -O espruino_wifi/Wifi.min.js
node ../../../EspruinoDocs/bin/minify.js nordic/Thingy.js nordic/Thingy.min.js
node ../../../EspruinoDocs/bin/minify.js rak/RAK8211.js rak/RAK8211.min.js
node ../../../EspruinoDocs/bin/minify.js rak/RAK8212.js rak/RAK8212.min.js