Git Product home page Git Product logo

esp_relay's Introduction

ESP RELAY

开关模块个人固件.

作者声明

注意: 本项目主要目的为作者本人自己学习及使用而开发,本着开源精神及造福网友而开源,仅个人开发,可能无法做到完整的测试,所以不承担他人使用本项目照成的所有后果。

严禁他人将本项目用户用于任何商业活动。个人在非盈利情况下可以自己使用,严禁收费代刷等任何盈利服务、

有需要请联系作者:[email protected]

开关模块

本开关模块为自己家装修使用,只支持零火。没有单火需求所以也没有单火版。

image image image image

开关模块以ESP-01M为基础实现了一路、二路、三路并附带面板LED指示灯及射频功能

IO对应:

按键:
L1:GPIO4
L2:GPIO9
L3:GPIO10
面板指示灯:
S1:GPIO0
S2:GPIO2
S3:GPIO15

射频

为什么需要射频?
不想因为WIFI或者HA等设备出故障的时候影响日常生活。
射频为软件解码支持433MHz和315MHz

固件

特性

本固件使用开关模块硬件为基础,实现以下功能:

  • 单独控制开关
  • 支持普通开关、自复位开关
  • 支持三档筒灯
  • 支持射频
  • OTA在线升级
  • WEB配置页面
  • MQTT服务器连接控制
  • 通过MQTT连入Home Assistant

如何配网

1、第一次使用自动进入配网模式

如何编译

Visual Studio Code + PlatformIO ID 开发 安装

已支持接入的开源智能家居平台

以下排序随机,不分优劣。合适自己的就好。

1、Home Assistant

Home Assistant 是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制、自动化等。

接入方法

WEB页面开启MQTT自动发现

2、ioBroker

ioBroker是基于nodejs的物联网的集成平台,为物联网设备提供核心服务、系统管理和统一操作方式。

接入方法

ioBroker相关接入问题可以加QQ群776817275咨询

3、其他支持mqtt的平台

理论上来说,只要是支持MQTT的平台都可以实现接入。

接入方法

添加对应的topic

固件截图

image image image image

感谢各位使用本方法的玩家,欢迎加入QQ群776817275

免责申明

以上纯属个人爱好,因为使用上述方法造成的任何问题,不承担任何责任。

部分图片来源于网络,如果涉及版权,请通知删除。

esp_relay's People

Contributors

qlwz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

esp_relay's Issues

编译失败

Processing relay-all (framework: arduino; board: esp01_1m; platform: espressif8266)
------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp01_1m.html
PLATFORM: Espressif 8266 (2.4.0) > Espressif Generic ESP8266 ESP-01 1M
HARDWARE: ESP8266 80MHz, 80KB RAM, 1MB Flash
PACKAGES:

  • framework-arduinoespressif8266 @ 3.20603.200130 (2.6.3)

  • tool-esptool @ 1.409.0 (4.9)

  • tool-esptoolpy @ 1.20800.0 (2.8.0)

  • tool-mkspiffs @ 1.200.0 (2.0)

  • toolchain-xtensa @ 2.40802.200502 (4.8.2)
    LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    [nanopb] Installing Protocol Buffers dependencies
    Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
    Requirement already satisfied: protobuf>=3.19.1 in c:\python\python311\lib\site-packages (4.23.4)
    [nanopb] No generation needed.
    Found 42 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- PubSubClient @ 2.8.0
    |-- Nanopb @ 0.3.9+5.sha.accfbbb
    |-- rc-switch @ 2.6.4
    |-- esp_framework @ 1.0
    |-- Wire @ 1.0
    Building in release mode
    Compiling .pio\build\relay-all\src\Dimming.cpp.o
    Compiling .pio\build\relay-all\src\RadioReceive.cpp.o
    Compiling .pio\build\relay-all\src\Relay.cpp.o
    Compiling .pio\build\relay-all\src\RelayConfig.pb.c.o
    Compiling .pio\build\relay-all\src\main.cpp.o
    Generating LD script .pio\build\relay-all\ld\local.eagle.app.v6.common.ld
    Compiling .pio\build\relay-all\lib01a\PubSubClient\PubSubClient.cpp.o
    Compiling .pio\build\relay-all\lib1a1\Nanopb@src-7175274c3fb6789bcb487a531f5a6463\pb_common.c.o
    Compiling .pio\build\relay-all\lib1a1\Nanopb@src-7175274c3fb6789bcb487a531f5a6463\pb_decode.c.o
    Compiling .pio\build\relay-all\lib1a1\Nanopb@src-7175274c3fb6789bcb487a531f5a6463\pb_encode.c.o
    Compiling .pio\build\relay-all\lib4d2\rc-switch\RCSwitch.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\BearSSLHelpers.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\CertStoreBearSSL.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFi.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiAP.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiMulti.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiSTA-WPS.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiSTA.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\ESP8266WiFiScan.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiClient.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiClientSecureAxTLS.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiClientSecureBearSSL.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiServer.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiServerSecureAxTLS.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiServerSecureBearSSL.cpp.o
    Compiling .pio\build\relay-all\lib395\ESP8266WiFi\WiFiUdp.cpp.o
    Compiling .pio\build\relay-all\libe27\ESP8266WebServer\detail\mimetable.cpp.o
    Archiving .pio\build\relay-all\lib1a1\[email protected]
    In file included from include/Dimming.h:6:0,
    from src\Dimming.cpp:3:
    include/Relay.h:52:17: error: 'WebServer' has not been declared
    void httpDo(WebServer *server);
    ^
    include/Relay.h:53:22: error: 'WebServer' has not been declared
    void httpSetting(WebServer *server);
    ^
    include/Relay.h:54:17: error: 'WebServer' has not been declared
    void httpHa(WebServer *server);
    ^
    include/Relay.h:56:27: error: 'WebServer' has not been declared
    void httpRadioReceive(WebServer *server);
    ^
    include/Relay.h:98:18: error: 'WebServer' has not been declared
    void httpAdd(WebServer server);
    ^
    include/Relay.h:99:19: error: 'WebServer' has not been declared
    void httpHtml(WebServer server);
    ^
    include/Relay.h:100:26: error: 'WebServer' has not been declared
    String httpGetStatus(WebServer server);
    ^
    include/Relay.h:94:10: error: conflicting return type specified for 'virtual bool Relay::mqttCallback(char
    , char
    , char
    )'
    bool mqttCallback(char topic, char payload, char cmnd);
    ^
    In file included from include/Relay.h:5:0,
    from include/Dimming.h:6,
    from src\Dimming.cpp:3:
    lib\esp_framework\include/Module.h:39:18: error: overriding 'virtual void Module::mqttCallback(char
    , char
    , char
    )'
    virtual void mqttCallback(char *topic, char *payload, char *cmnd);
    ^
    In file included from src\Dimming.cpp:3:0:
    include/Dimming.h:52:28: error: 'WebServer' has not been declared
    void httpSetBrightness(WebServer *server);
    ^
    include/Dimming.h:53:19: error: 'WebServer' has not been declared
    void httpHtml(WebServer *server);
    ^
    include/Dimming.h:54:17: error: 'WebServer' has not been declared
    void httpHa(WebServer *server, uint8_t ch);
    ^
    include/Dimming.h:56:26: error: 'WebServer' has not been declared
    String httpGetStatus(WebServer *server);
    ^
    src\Dimming.cpp:17:8: error: 'DRAM_ATTR' does not name a type
    static DRAM_ATTR ROTARY Rotary;
    ^
    src\Dimming.cpp: In member function 'void Dimming::switchRelayPWM(uint8_t, bool, bool)':
    src\Dimming.cpp:170:9: error: 'Log' has not been declared
    Log::Info(PSTR("PWMRelay %d . . . %s"), ch + 1, isOn ? "ON" : "OFF");
    ^
    src\Dimming.cpp:239:9: error: 'Log' has not been declared
    Log::Info(PSTR("Relay %d . . . Color:%d %d %d Brightness:%d %d %d"), ch + 1, ct, icold, target_color[MAX_PWM_NUM * 2 - 1 - pwmch], brightness, iwarm, target_color[pwmch]);
    ^
    src\Dimming.cpp:245:9: error: 'Log' has not been declared
    Log::Info(PSTR("Relay %d %d. . . Brightness:%d %d"), ch + 1, pwmch, brightness, target_color[pwmch]);
    ^
    src\Dimming.cpp: In function 'void update_rotary()':
    src\Dimming.cpp:340:21: error: 'Rotary' was not declared in this scope
    uint8_t state = Rotary.state & 3;
    ^
    In file included from include/RadioReceive.h:7:0,
    from src\RadioReceive.cpp:2:
    include/Relay.h:52:17: error: 'WebServer' has not been declared
    void httpDo(WebServer *server);
    ^
    include/Relay.h:53:22: error: 'WebServer' has not been declared
    void httpSetting(WebServer *server);
    ^
    include/Relay.h:54:17: error: 'WebServer' has not been declared
    void httpHa(WebServer *server);
    ^
    src\Dimming.cpp: In member function 'void Dimming::RotaryInit()':
    src\Dimming.cpp:379:9: error: 'Rotary' was not declared in this scope
    Rotary.pinA = ROT_PIN[0];
    ^
    include/Relay.h:56:27: error: 'WebServer' has not been declared
    void httpRadioReceive(WebServer *server);
    ^
    src\Dimming.cpp:386:9: error: 'Rotary' was not declared in this scope
    Rotary.pinB = ROT_PIN[1];
    ^
    include/Relay.h:98:18: error: 'WebServer' has not been declared
    void httpAdd(WebServer server);
    ^
    include/Relay.h:99:19: error: 'WebServer' has not been declared
    void httpHtml(WebServer server);
    ^
    include/Relay.h:100:26: error: 'WebServer' has not been declared
    String httpGetStatus(WebServer server);
    ^
    src\Dimming.cpp: In member function 'bool Dimming::RotaryButtonPressed()':
    src\Dimming.cpp:395:9: error: 'Rotary' was not declared in this scope
    if (Rotary.changed)
    ^
    include/Relay.h:94:10: error: conflicting return type specified for 'virtual bool Relay::mqttCallback(char
    , char
    , char
    )'
    bool mqttCallback(char topic, char payload, char cmnd);
    ^
    src\Dimming.cpp: In member function 'void Dimming::RotaryHandler()':
    src\Dimming.cpp:404:9: error: 'Rotary' was not declared in this scope
    if (Rotary.interrupts_in_use < 2)
    ^
    In file included from include/Relay.h:5:0,
    from include/RadioReceive.h:7,
    from src\RadioReceive.cpp:2:
    lib\esp_framework\include/Module.h:39:18: error: overriding 'virtual void Module::mqttCallback(char
    , char
    , char
    )'
    virtual void mqttCallback(char *topic, char *payload, char *cmnd);
    ^
    src\Dimming.cpp:413:9: error: 'Rotary' was not declared in this scope
    if (Rotary.position != 0)
    ^
    src\Dimming.cpp:431:13: error: 'Log' has not been declared
    Log::Info(PSTR("SetColorTemp: %d"), Rotary.position);
    ^
    src\Dimming.cpp:447:13: error: 'Log' has not been declared
    Log::Info(PSTR("SetBrightness: %d"), Rotary.position);
    ^
    src\RadioReceive.cpp: In member function 'void RadioReceive::study(uint8_t)':
    src\RadioReceive.cpp:46:5: error: 'Log' has not been declared
    Log::Info(PSTR("Receive study . . . "));
    ^
    src\RadioReceive.cpp: In member function 'void RadioReceive::del(uint8_t)':
    src\RadioReceive.cpp:53:5: error: 'Log' has not been declared
    Log::Info(PSTR("Receive del . . . "));
    ^
    src\RadioReceive.cpp: In member function 'void RadioReceive::delAll()':
    src\RadioReceive.cpp:63:5: error: 'Log' has not been declared
    Log::Info(PSTR("Receive delAll . . . "));
    ^
    src\RadioReceive.cpp: In member function 'void RadioReceive::loop()':
    src\RadioReceive.cpp:70:9: error: 'Log' has not been declared
    Log::Info(PSTR("Receive study timeout"));
    ^
    src\RadioReceive.cpp:112:21: error: 'Log' has not been declared
    Log::Info(PSTR("Received %d to channel %d"), value, ch + 1);
    ^
    src\Dimming.cpp: In member function 'void Dimming::RotaryLoop()':
    src\Dimming.cpp:460:35: error: 'Rotary' was not declared in this scope
    if (((int32_t)(millis() - Rotary.debounce)) > 0)
    ^
    src\Dimming.cpp: At global scope:
    src\Dimming.cpp:469:33: error: variable or field 'httpSetBrightness' declared void
    void Dimming::httpSetBrightness(WebServer *server)
    ^
    src\Dimming.cpp:469:33: error: 'WebServer' was not declared in this scope
    src\RadioReceive.cpp: In member function 'void RadioReceive::delStudy(uint8_t, long unsigned int)':
    src\RadioReceive.cpp:156:5: error: 'Log' has not been declared
    Log::Info(PSTR("Received %d del to channel %d"), value, (ch) + 1);
    ^
    src\Dimming.cpp:469:44: error: 'server' was not declared in this scope
    void Dimming::httpSetBrightness(WebServer *server)
    ^
    src\RadioReceive.cpp: In member function 'void RadioReceive::saveStudy(uint8_t, long unsigned int)':
    src\RadioReceive.cpp:162:5: error: 'Log' has not been declared
    Log::Info(PSTR("study index %d %d"), ch, index);
    ^
    src\RadioReceive.cpp:167:13: error: 'Log' has not been declared
    Log::Info(PSTR("Received %d study to channel %d is has"), value, (ch) + 1);
    ^
    src\RadioReceive.cpp:188:5: error: 'Log' has not been declared
    Log::Info(PSTR("Received %d study to channel %d"), value, (ch) + 1);
    ^
    In file included from src\Relay.cpp:1:0:
    include/Relay.h:52:17: error: 'WebServer' has not been declared
    void httpDo(WebServer *server);
    ^
    include/Relay.h:53:22: error: 'WebServer' has not been declared
    void httpSetting(WebServer *server);
    ^
    include/Relay.h:54:17: error: 'WebServer' has not been declared
    void httpHa(WebServer *server);
    ^
    include/Relay.h:56:27: error: 'WebServer' has not been declared
    void httpRadioReceive(WebServer *server);
    ^
    include/Relay.h:98:18: error: 'WebServer' has not been declared
    void httpAdd(WebServer server);
    ^
    include/Relay.h:99:19: error: 'WebServer' has not been declared
    void httpHtml(WebServer server);
    ^
    include/Relay.h:100:26: error: 'WebServer' has not been declared
    String httpGetStatus(WebServer server);
    ^
    include/Relay.h:94:10: error: conflicting return type specified for 'virtual bool Relay::mqttCallback(char
    , char
    , char
    )'
    bool mqttCallback(char topic, char payload, char cmnd);
    ^
    In file included from include/Relay.h:5:0,
    from src\Relay.cpp:1:
    lib\esp_framework\include/Module.h:39:18: error: overriding 'virtual void Module::mqttCallback(char
    , char
    , char
    )'
    virtual void mqttCallback(char *topic, char *payload, char *cmnd);
    ^
    In file included from src\Relay.cpp:3:0:
    include/Dimming.h:52:28: error: 'WebServer' has not been declared
    void httpSetBrightness(WebServer *server);
    ^
    include/Dimming.h:53:19: error: 'WebServer' has not been declared
    void httpHtml(WebServer *server);
    ^
    include/Dimming.h:54:17: error: 'WebServer' has not been declared
    void httpHa(WebServer *server, uint8_t ch);
    ^
    include/Dimming.h:56:26: error: 'WebServer' has not been declared
    String httpGetStatus(WebServer *server);
    ^
    src\Relay.cpp: In member function 'virtual void Relay::readConfig()':
    src\Relay.cpp:226:12: error: 'FSReadConfig' is not a member of 'Config'
    isOk = Config::FSReadConfig(RELAY_CONFIG, RELAY_CFG_VERSION, sizeof(RelayConfigMessage), RelayConfigMessage_fields, &config, configCrc);
    ^
    src\Relay.cpp:226:130: error: 'configCrc' was not declared in this scope
    isOk = Config::FSReadConfig(RELAY_CONFIG, RELAY_CFG_VERSION, sizeof(RelayConfigMessage), RelayConfigMessage_fields, &config, configCrc);

       ^
    

src\Relay.cpp: In member function 'virtual void Relay::resetConfig()':
src\Relay.cpp:250:5: error: 'Log' has not been declared
Log::Info(PSTR("moduleResetConfig . . . OK"));
^
src\Relay.cpp: In member function 'virtual void Relay::saveConfig(bool)':
src\Relay.cpp:283:9: error: 'FSSaveConfig' is not a member of 'Config'
if (Config::FSSaveConfig(RELAY_CONFIG, RELAY_CFG_VERSION, RelayConfigMessage_size, RelayConfigMessage_fields, &config, configCrc))
^
src\Relay.cpp:283:124: error: 'configCrc' was not declared in this scope
if (Config::FSSaveConfig(RELAY_CONFIG, RELAY_CFG_VERSION, RelayConfigMessage_size, RelayConfigMessage_fields, &config, configCrc))

^

src\Relay.cpp: At global scope:
src\Relay.cpp:394:21: error: variable or field 'httpAdd' declared void
void Relay::httpAdd(WebServer *server)
^
src\Relay.cpp:394:21: error: 'WebServer' was not declared in this scope
src\Relay.cpp:394:32: error: 'server' was not declared in this scope
void Relay::httpAdd(WebServer *server)
^
*** [.pio\build\relay-all\src\Dimming.cpp.o] Error 1
*** [.pio\build\relay-all\src\RadioReceive.cpp.o] Error 1
*** [.pio\build\relay-all\src\Relay.cpp.o] Error 1
In file included from src\main.cpp:3:0:
include/Relay.h:52:17: error: 'WebServer' has not been declared
void httpDo(WebServer *server);
^
include/Relay.h:53:22: error: 'WebServer' has not been declared
void httpSetting(WebServer *server);
^
include/Relay.h:54:17: error: 'WebServer' has not been declared
void httpHa(WebServer *server);
^
include/Relay.h:56:27: error: 'WebServer' has not been declared
void httpRadioReceive(WebServer *server);
^
include/Relay.h:98:18: error: 'WebServer' has not been declared
void httpAdd(WebServer server);
^
include/Relay.h:99:19: error: 'WebServer' has not been declared
void httpHtml(WebServer server);
^
include/Relay.h:100:26: error: 'WebServer' has not been declared
String httpGetStatus(WebServer server);
^
include/Relay.h:94:10: error: conflicting return type specified for 'virtual bool Relay::mqttCallback(char
, char
, char
)'
bool mqttCallback(char topic, char payload, char cmnd);
^
In file included from include/Relay.h:5:0,
from src\main.cpp:3:
lib\esp_framework\include/Module.h:39:18: error: overriding 'virtual void Module::mqttCallback(char
, char
, char
)'
virtual void mqttCallback(char *topic, char *payload, char *cmnd);
^
*** [.pio\build\relay-all\src\main.cpp.o] Error 1
============================================== [FAILED] Took 4.24 seconds ==============================================
Environment Status Duration


relay-all FAILED 00:00:04.242
======================================== 1 failed, 0 succeeded in 00:00:04.242 ========================================

编译不通过,无法发现Ticker.h

你好,我用 VScode + Platformio 编译,无法通过,出错情况如下:
.pio\libdeps\relay-mini\esp_framework\include/Config.h:6:20: fatal error: Ticker.h: No such file or directory
请问,这个是什么原因?
我之前用你很早之前的版本,编译是没问题的,编译esp-dc1也没问题的,谢谢!

Homekit.h

i have error if compile [env:relay-homekit] please help..

src\Relay.cpp:5:21: fatal error: HomeKit.h: No such file or directory



#include "HomeKit.h"
^
compilation terminated.
*** [.pio\build\relay-homekit\src\Relay.cpp.o] Error 1
Compiling .pio\build\relay-homekit\lib2f4\PubSubClient\PubSubClient.cpp.o
src\main.cpp:10:21: fatal error: homekit.h: No such file or directory



#include "homekit.h"
^
compilation terminated.
*** [.pio\build\relay-homekit\src\main.cpp.o] Error 1

关于esp-01m

大佬,为什么不用esp-12f呢,成本能拉低四块钱左右,io口还多

提交一个显示小问题

如果Template.h只有一个模块,控制页面开关设置选中选没有显示出来。如下修改后,可以正常显示。
relay.cpp 500行 修改为:
if (SupportedModules::MAXMODULE > 1)
{
snprintf_P(html, sizeof(html), PSTR("id('module_type').value=%d;setRadioValue('power_on_state', '%d');setRadioValue('power_mode', '%d');setRadioValue('switch_mode', '%d');"),
config.module_type, config.power_on_state, config.power_mode, config.switch_mode);
}
else{ //只有一个模块
Log::Info(PSTR("iChen html Break-Point() debug! ")); //iChen debug
snprintf_P(html, sizeof(html), PSTR("setRadioValue('power_on_state', '%d');setRadioValue('power_mode', '%d');setRadioValue('switch_mode', '%d');"),
config.power_on_state, config.power_mode, config.switch_mode);
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.