Coder Social home page Coder Social logo

wiegand-protocol-library-for-arduino's Introduction

Wiegand 4 bit, 8 bit, 24 bit, 26 bit, 32 bit and 34 bit library for Arduino

The Wiegand interface is a de facto standard commonly used to connect a card reader or keypad to an electronic entry system. Wiegand interface has the ability to transmit signal over long distance with a simple 3 wires connection. This library uses interrupt pins from Arduino to read the pulses from Wiegand interface and return the code and type of the Wiegand.

Different Wiegand libraries comparison

Library Description
Wiegand library This is the easiest and cleanest library to use when only a single wiegand reader is needed. I strongly suggest to use this version if you only need one reader support
Wiegand NG library This is another single reader library, however it uses dynamic memory to store the raw wiegand thus allowing unlimited bit length to be stored as long as your Arduino board has the memory to store it. I won't recommend to use this library unless you are facing a non-standard wiegand reader that sends out data that will not be decoded by the original Wiegand library.
Multi Wiegand library This library uses pin change interrupt this allowing all the pin change interrupt supported pin to be used. With this, multiple readers can also be supported. Due to a workaround (hack) used to overcome the limitation with attachInterrupt not being able to be attached to class method directly, the initialisation of the sketch is more ugly and complicated.

Requirements

The following are needed

  • Arduino - Any ATMEGA328 compatible board should work.
  • Wiegand RFID Reader - The code was written for this reader however customers reported working with HID compatible readers.
  • DATA0 of Wiegand connects to Arduino PIN 2 and DATA1 of Wiegand connects to Arduino PIN 3

Installation

Create a folder named Wiegand in Arduino's libraries folder. You will have the following folder structure:

cd arduino/libraries
git clone https://github.com/monkeyboard/Wiegand-Protocol-Library-for-Arduino.git Wiegand

Arduino Sketch

alt text

Execute Arduino IDE, select Example-->Wiegand-->WiegandTest

Example


#include <Wiegand.h>

WIEGAND wg;

void setup() {
	Serial.begin(9600);  
	
	// default Wiegand Pin 2 and Pin 3 see image on README.md
	// for non UNO board, use wg.begin(pinD0, pinD1) where pinD0 and pinD1 
	// are the pins connected to D0 and D1 of wiegand reader respectively.
	wg.begin();
}

void loop() {
	if(wg.available())
	{
		Serial.print("Wiegand HEX = ");
		Serial.print(wg.getCode(),HEX);
		Serial.print(", DECIMAL = ");
		Serial.print(wg.getCode());
		Serial.print(", Type W");
		Serial.println(wg.getWiegandType());    
	}
}

Contributors

softwarefoundry added library.properties

Francesco Uggetti (ugge75) improved this version of library to support multiple readers for ATMEGA2560. Please check out his version of multiple wiegand readers library here

Apollon77 improved interrupt safety and removed sysTick from global

paulfurley added 4 bit code

PaulStoffregen added Use digitalPinToInterrupt on newer Arduino software, if present

tholum Simpler Instructions

zanhecht Recognize 24- and 32-bit

luckymallari Simplified begin(D0, D1) for ESP(8266/32) devices.

Written by JP Liew

Project home: http://www.monkeyboard.org/tutorials/82-protocol/24-wiegand-converter

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

wiegand-protocol-library-for-arduino's People

Contributors

beikeland avatar jpliew avatar paulstoffregen avatar softwarefoundry avatar tholum avatar zanhecht 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wiegand-protocol-library-for-arduino's Issues

UHF Reader Wiegand Doubled Value

Hi

I got new UHF Long Range Reader and I can Read and Write on the Tags without any problems on the Card Number Block
The Numbering was 1001 , 1002 , 1003 ...etc

The Problem is the Control Panel (ZK C3-400) get the Numbers doubled 2002 , 2004 , 2006
the First Testing it was Ok at my home but after Fixing it become like that

I dont Know does the (Pulse Width or Pulse Interval) Value will affect and what is the Right value

Please Help

different Card UID with MFRC522 and Wiegand 34

I use mfrc522 reader for arduino and read card UID - 30166134113 (Dec)
my home system, with wiegand 34, read this card with different UID - 1904649758 (Dec)
How convert from weigand 34 to mifare ?

wg.getcode....without reading fingerprint

Hello,
i have an installation with Arduino & Wiegand FingerPrint/RFID reader....all works fine for several months, so the reader provides Arduino with codes and Arduino decides to open the door and even not....

Today, first time after 2 months perfectly working, suddenly during the day without any interaction....the door opened. So my question, is there any chance that the library is suboptimal behaving in certain situation, providing codes....believing codes are coming in without any really communication....some not cleared variables.....

For me its hard to believe that without any fingerprint reading....the hardware from the fingerprintreader provides a code like "123423452" by itself....also the last read fingerprint was a different one from this one......

guess you will understand this for me its tough now how much i still believe in this installation, and also not 100% sure which part failed.....thanks for your thoughts and ideas. Norbert

Order of bytes in "wg.getCode"

hello and first of all thank you for the library.

I am new to arduino and programming, my question may seem naive to you.

I used the WiegandTest file from the Library. I want to retrieve part of the UID of a Mifare classic / ultralight tag.
I use this wiegand reader from BSTUOKEY which works in 5v: [https://fr.aliexpress.com/item/4000261733386.html?spm=a2g0o.store_pc_groupList.8148356.33.e079730aKqZWMp]

I understood that in wiegand 26 I was limited to the first 3 bytes
The code of the test file
Serial.println (wg.getCode (), HEX does display the start of the UID of my cards (Mifare classic or ultralight), but out of order:

For example for my card Mifare classic:
I have the result 9B3FAA while with another RFID reader and nfctools I have AA: 3F: 9B: 1A for a classic mifare.

For the ultralight:
68AF04 and with the other reader:
04: AF: 68: DA: C8: 5A: 80 (for example with my phone)

Why are the first 3 bytes inverted and is it possible to have them in the order of the UID?

Thank you in advance if you have a few minutes to inform me.
Cordially
ced

What types of pins do I need to connect D0 and D1 to an ESP32 ?

Hello !

Can I randomly choose two GPIO from the ESP32 pins or do they have to be specific pins, like UART pins ?

For example, if I want to use the Serial interface on the ESP32-EVB I will use GPIO 4 and GPI 36 specifically:

#define RX1 36
#define TX1 4

Do D0 and D1 have the same requirements ? Or I can choose whatever pins I have available ? Do they have to be input or output or both ?

Thank you.

Wiegand 32 wrong output

Hello,

i have Mifare card with UID A4DCCC1D.

When reading with Wiegand reader using Wiegand 32 Type with this code i get this:
HEX = 126E660E, DECIMAL = 309224974, Wiegand Type = W32

The code is not the same as expected, it seems this library shift binary data off somehow:

A4DCCC1D To Binary Converted 10100100110111001100110000011101
126E660E To Binary Converted 00010010011011100110011000001110

-10100100110111001100110000011101 <- Mifare UID (HEX = A4DCCC1D | DECIMAL = 2765933597)
00010010011011100110011000001110- <- Wiegand 32 (HEX = 126E660E | DECIMAL = 309224974)

How to solve this issue?

"Wrong" card value detected - UHF Mid Range Reader

Hi.

We have the following setup:

Pinout is made on ports 2 & 3 on the UNO.
Reader is set to output card value (EPC-GEN 2- Tag) through wiegand interface with wiegand26 protocol.

Testing on the reader program itself we get a 12byte tag as follows:
E2 00 41 25 24 0B 02 00 04 30 ea f9

And on arduino we only get (through the library wg.getCode() ) the mid 4byte value:
Decimal: 604701184
HEX: 24 0B 02 00

There's any change we can do to make it read the last 4 bytes or last 8 bytes?
Meaning "04 30 ea f9" or "24 0B 02 00 04 30 ea f9" as an unsigned long.

Missing one bit in serial number

Hi,
i can get the serial number of my RFID using the example in this library. However, i´m missing the first bit of serial number and i don´t know how to fix it.

My RFID uses 34 bits, 32 for serial number and 2 for parity, but when i code "Serial.print(wg.getCode(),BIN);" i recieve just 31 bits :(

How to define the D0 and D1 pins when calling the init for wiegand in sketch without changing the code in library by hand ?

In the library in Wiegand.cpp you can set the proper pins for the Wiegand interface.
Is there a way to define those pins in sketch ? if I have two different designs i must check what is set in Wiegand.cpp, also it makes problems when sharing the code over git, because if someone is using default configuration the code actually will not work and that gives another "complication" when working with many people with the same code.

void WIEGAND::begin() { #ifdef digitalPinToInterrupt // newer versions of Arduino provide pin to interrupt mapping begin(2,digitalPinToInterrupt(2),3,digitalPinToInterrupt(3)); #else begin(2,0,3,1); #endif

So as i'm not a specialist in terms of programming i'm asking how can i init wiegand interface in sketch and point it to the proper pins if they are different than the ones hardcoded in library?

can i define the pins when calling the init for wiegand ?
wg.begin();

and how exactly, and if not, than will someone add that functionality for this library ? It would be very very useful.

Thanx

Possible get card code reverse with command

Have possible give somehow direct card code reverse example 9B3FAA, AA3F9B?
Need new part to software? Example wg.getCode (), HEX / wg.getCodeinv (), HEX
Some reader give data reverse.

Last commit broke the user page

Unfortunately, last commits broke the user page. It just stops at a message:

"You can add new users by either scanning a RFID Tag or by clicking on "New User" button."

And there is no add button to be shown etc..

please check, i have Wiegand version waiting for that. It's tested, works fine.. but this is confusing :(

Arduino Leonardo - no output but on ESP works

Have anyone tested this lib on Leonardo ?

When I use the WiegandTest.ino, I have no output on terminal.
Clean lib. and keypad connected to pin 2 and 3 (tested both D1-pin2 and oposite)
Tested on two keypads, with Wiegand 26 8bit and Wiegand34 8bit.

But I have output on esp32 with the same code, just changed board and comport.

Wiegand HEX = 4, DECIMAL = 4, Type W8
Wiegand HEX = 5, DECIMAL = 5, Type W8
Wiegand HEX = 6, DECIMAL = 6, Type W8
Wiegand HEX = 7, DECIMAL = 7, Type W8
Wiegand HEX = 8, DECIMAL = 8, Type W8
Wiegand HEX = 9, DECIMAL = 9, Type W8
Wiegand HEX = 0, DECIMAL = 0, Type W8

Any ideas what's wrong ?

Win 10 , IDE 1.8.5

It doesn't work on ESP32-EVB

Board: Olimex ESP32-EVB

I am trying to read a 26 bit card using a Card Reader. I have got a list of available pins from Olimex and I have tried some pins, but I get no output.

The code is basic:

#include <Arduino.h>
#include <Wiegand.h>

#define W0 13
#define W1 17

WIEGAND wg;

void setup() {
  Serial.begin(115200);
  wg.begin(W0,W1);
  Serial.println("------------------------------------");
  Serial.println(digitalRead(W0));
  Serial.println(digitalRead(W1));
}

void loop() {
  if(wg.available()) {
    Serial.println("wg.available()");

    Serial.print("Wiegand HEX = ");
    Serial.print(wg.getCode(),HEX);
    Serial.print(", DECIMAL = ");
    Serial.print(wg.getCode());
    Serial.print(", Type W");
    Serial.println(wg.getWiegandType());    
  }
}

The above pins are:

ESP32-WROOM-32D#16 - GPIO13/I2C-SDA - EXT1#14 - UEXT1#6 (pulled-up to 3.3V via 2.2k)
ESP32-WROOM-32D#28 - GPIO17/SPI_CS - EXT1#18 - UEXT1#10 (pulled-up to 3.3V via 10k)

The card reader is a SVTech X-STAL.

What do you think ? I've tried reversing the pins, but still no output.

Also, is there a way of mimicking reading a card by sending data to the reader using the ESP ? So, instead of using a card, I send the 26 bit code to the reader as if a card was used.

Same card same reader different data

I am using your library with this card reader. However for the same card it gives me a different output every single time and the type is detected as W34 for some reason. What am I doing wrong?

11:11:07.914 -> Wiegand HEX = 854B50F5, DECIMAL = 2236305653, Type W34
11:11:14.045 -> Wiegand HEX = A1EA42BB, DECIMAL = 2716484283, Type W34
11:11:19.744 -> Wiegand HEX = 41D2953B, DECIMAL = 1104319803, Type W34
11:11:23.110 -> Wiegand HEX = 854B50F5, DECIMAL = 2236305653, Type W34
11:11:28.462 -> Wiegand HEX = A9CA82AB, DECIMAL = 2848621227, Type W34
11:11:31.486 -> Wiegand HEX = 8ACA81AB, DECIMAL = 2328527275, Type W34
11:11:34.393 -> Wiegand HEX = 43455475, DECIMAL = 1128617077, Type W34

Connect two readers to one controller

Was just wondering whether it would be possible to monitor two readers with the same controller. I tried the following code but it only logs reads from Wiegand1.

#include <Wiegand.h>

WIEGAND wg1;
WIEGAND wg2;

const int pinD01 = 2;
const int pinD11 = 3;
const int pinD02 = 18;
const int pinD12 = 19;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  wg1.begin(pinD01, pinD11);
  wg2.begin(pinD02, pinD12);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(wg1.available()) {
    Serial.print("Wiegand1 HEX = ");
    Serial.print(wg1.getCode(),HEX);
    Serial.print(", DECIMAL = ");
    Serial.print(wg1.getCode());
    Serial.print(", Type W");
    Serial.println(wg1.getWiegandType());    
  }
  if(wg2.available()) {
    Serial.print("Wiegand2 HEX = ");
    Serial.print(wg2.getCode(),HEX);
    Serial.print(", DECIMAL = ");
    Serial.print(wg2.getCode());
    Serial.print(", Type W");
    Serial.println(wg2.getWiegandType());    
  }
}

Connect 10 sensors of it

Hi,

I need connect 10 sensors with Wiegand protocol, but your library has a const for only one port. How i can connect 10 sensors using it?

Cant seem to get the card read

I have a generic EM Wiegand 26/34 bit reader.
The cable pin outs are standard, 12v, Gnd, D0, D1, purple (when connected to gnd turns it to 34 bit) and buzzer, as shown in picture https://imgur.com/a/BvFgg

I have setup the sketch and uploaded to Arduino Uno, code runs and awaits wg.available()
I have the 12v and GND connected to 12v +/-, and
only D0,D1 connected to Arduino uno io pins 2 and 3 (i have not connected GND to arduino gnd pin, as its already connected to 12v -)

when i tap an EM card, the reader beeps as card detected, but there is no output on the serial monitor.
I can see the reader not responding to non EM cards (like Mifare) and always beeps when EM card tapped.

I cant seem to find why the example sketch wq.available() doesnt work in this case.
The reader is generic, arduino uno works, D0 (green) and D1 (white) connected to pins correctly, 2 and 3.

I am not sure what could be the issue. Is there any pointers that You can share or alternative troubleshooting advise?

ESP32 wiegand interrupts in IRAM?

Does anyone successfully AND reliably have this lib working with ESP32? I notice that neither of the ISRs are in IRAM (which will normally cause kernel panics or stack smash issues) and there are no calls to suspend interrupts nor debounce them (other than the timer condition in DoWiegandConversion()).

In my test setup I am getting no wiegand data received by the sketch at all!

Reversed Byte Order

The actual card value is 12 34 56 78, however the library spits out 78 56 34 12. Is there a way to reverse the byte order within the library?

Output bits are flipped.

Hello, I'm using a WG 34 reader, and ran into an issue. Reading the card with a standard reader drops these hex values: 4DE2D147, the library returns this output: HEX = D1E24D, DECIMAL = 13754957 As you can see the order is flipped, and two numbers are missing. How do I get these numbers, and how do I re-arrange the order that the bits are presented propperly?

Wiegand 26 or 24?

The description says it's 24 but the Readme.md says 26. Which is it?

randomly reporting card with "0" code and differnt card lengths

I started using the library and it's reporting random card numbers and lengths every once in a while. (randomly)

it usually reports "0" for a card number and various lenghts, but does occasionally give some strange card numbers "4" "5" "ffffff" etc.

all the wires are soldered in with the exception of the cable from the reader..

I'm using an esp32 nodemcu

has anyone seen this before?

Does the reader support 125Khz readers?

I have received a reader which is similar to the one we discussed over here, but this one uses the 125khz standard instead of the Mhz standard. I receive no output whatsoever, even tho the wiring is the same, and it's all properly connected. Any ideas?

Different readers return different value

I tried to read tags with different readers, but it seems like decoding is reader-specific.

This two values are the same tag, but different reader:
7384CF
8C7B30

For both readers it prints W26 reader type.

Is there some way how to recalculate it, so I can use different readers in one access system?

Poor handling of previously unknown bit lengths values.

This is a great library, but the fact that it only handles W26 and W34 is unfortunate. There are many different bit lengths used by various vendors, and it would be highly useful to have a mode where it just saves the Wiegand data as-is, and does not try to decode it. The failure mode for using unknown card types should be more graceful. :-)

Is it possible to read card ID and memory?

I use this library, everything works fine, but I would also like to read data that I write to the cards/tags.
Is it even possible with WG?
Do I have to buy specific WG RFID reader or everyone can read memory?
I don't know much about Wiegand protocol and RFID that why I ask,,,

Wiegand.h not working on other pins than 2 & 3

Pin 2 is in our application used for the RS485 control, so I changed D0 to pin4 & D1 to pin5.
This doesn't work
(I'm using an Arduino Nano)

Any idea what I'm doing wrong?

#include <Wiegand.h>

WIEGAND wg;
const int WG_D0 = 4;
const int WG_D1 = 5;

void setup() {
Serial.begin(9600);

// default Wiegand Pin 2 and Pin 3 see image on README.md
// for non UNO board, use wg.begin(pinD0, pinD1) where pinD0 and pinD1
// are the pins connected to D0 and D1 of wiegand reader respectively.
wg.begin(WG_D0,WG_D1);
}

void loop() {
if(wg.available())
{
Serial.print("Wiegand HEX = ");
Serial.print(wg.getCode(),HEX);
Serial.print(", DECIMAL = ");
Serial.print(wg.getCode());
Serial.print(", Type W");
Serial.println(wg.getWiegandType());
}
}

Arduino Due

I am currently trying to setup the library for a Due but softSerial does not work on the due thus I am not able to make the library work. Please advise a solution.

Configuring GPIO PIN for ESP32 ?

Any idea how to use this library with ESP32 ?

I do not know how to remap pins to proper pins that i have free on my board, and can any pin be used for input from wiegand reader ?

Why my 26-bit wiegand with facility code and card code is not showing the correct value?

I'm pretty new to bitwise calculations, and haven't been able to figure out why this isn't working for me. Trying to move to this library from my own code that works.

If I attach an interrupt to D0 and D1 that just prints a 0 or 1 respectively, and read a card with FC:21 and CC:15890 I get back the following bits:

10001010100111110000100100

Using an online Wiegand calculator (and my old code) this translates to:

2115890

With this library, using the example INO, I get this:

1392146

If I add "723744" to wg.getCode(); I get the correct return value for all of the cards I try in this facility code set.

If I just use the keypad, I get the correct return values, including the correct translated values given by translateEnterEscapeKeyPress()

I have tried this with multiple readers and keypad readers, the results are consistently wrong.

Wiegand 26 to Nodemcu Amica

i got problem when using nodemcu for reading using RFID reader wg26. The problem is serial monitor wont show the id from my tag and always displays a question mark at serial monitor every time I press reset on nodemcu.

drive fuction. command buzzer and keyboard LED.

The keyboard supplier tells me that it is possible to do feedback.
Report the result of the code with LED and buzzer.
Respons code error, or code right and opening.

The library does not have this function.
Can someone help me ?

Error compiling example

Hi,
Im getting this error when trying to compile your example:

\Arduino\libraries\Wiegand-Protocol-Library-for-Arduino-master\Wiegand.cpp: In member function 'void WIEGAND::begin()':
\Arduino\libraries\Wiegand-Protocol-Library-for-Arduino-master\Wiegand.cpp:37: error: 'NOT_AN_INTERRUPT' was not declared in this scope

Can you help me? Thanks.

No Data Reported

Setup:

  • WiegandTest example sketch
  • Arduino Uno
  • Arduino Mega 2560
  • HID ThinLine II Prox Reader

Behavior:
Sketch is loaded successfully to Uno.
HID ThinLine II reader connected to Arduino Uno using 5V from from Uno, Green (Data 0) connected to pin 2, White (Data 1) connected to pin 3, and black (GND) to ground. Upon powerup, the reader beeps and changes led state from red to green twice in a row, then a third time a half second apart. A single line, often "Wiegand HEX = 5, DECIMAL = 5, Type W4" is displayed over serial monitor (9600 bps) upon powerup. Subsequent card reads flash the led and beep but do not produce any output over serial.

Attempts to Fix:

  • Unplugged and replugged all connections
  • Swapped Uno for Mega 2560
  • Swapped Data 0 and Data 1
  • Unplugged and restored power by removing 5V line (this causes the "Wiegand HEX = 5, DECIMAL = 5, Type W4" to appear often, but not always).

Any ideas about what could be going on? Please let me know. Thanks!

'hang' after receiving number of bits different from 8, 26 and 34

If for some reason the library receive bit counts different from 8, 26 and 34 the _bitCount variables never resets and DoWiegandConversion function does not execute anymore. Simple fix is to put _bitCountA=0; _bitCountB=0; _bitCountC=0; in the else statement for "if ((_bitCountA==26) || (_bitCountA==34) || (_bitCountA==8) || (_bitCount...".

Esp 32 working for a while, not stable

Hi!! I have two RFIDs working, they work for a random period and it stops working, I use the double core, and the library is in the main core as well as its operation, everything else works correctly and stable, also the connections and data sending by Wi-Fi, has it happened to someone else, or can I stabilize it?

Feature Request - Pin Change Interrupt Support

I was wondering if it would be possible to add Pin Change Interrupt support to this library to enable a Wiegand reader to be connected to another pair of pins on the board?

Currently working on a project where I need to use the Pins 2 and 3 on an Arduino Uno for other purposes but can't use a Mega to get additional Hardware Interrupt Pins.

I would have a go myself but I'm not quite at the skill level to implement this.

is possible LED control?

Hello, my reader have also LED, but I have only one wire, please how I can control color of led?
Second wire is marked as a Base, but I dont understand if its tamper or buzzer, I think, there wire marked as LED is for green/red led and buzzer.
Please how can i control it? connected to GND or VCC is not doing anything.
Thank you

Library is not really interrupt-save

Hi,

I'm currently started coding for Arduino and learned some things about interrupts and the pitfalls and some things I do not find in your library:

1.) All variables that are shared between "Interrupt service routines" (ReadD0/1) should be declared as "volatile"
2.) When using the values in the main-loop you should disable interrupts because else an interrupt can interrupt the code and can bring you in potential race conditions

When my fingerprint-scanner is available then I will try to send in a pull request (because else I can not test the changes).

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.