0% found this document useful (0 votes)
11 views

Arduino-Basics(1)

Arduino-Basics(1)

Uploaded by

Makaran Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Arduino-Basics(1)

Arduino-Basics(1)

Uploaded by

Makaran Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 35

University of Donja Gorica

Faculty for Information Systems and Technologies


Faculty of Applied Science

Introduction to
Arduino programming
Marko Simeunović, PhD
Introduction
 Arduino – today most popular platform for rapid
prototyping.
 Consists of:
 microcontroller board (hardware) and
 IDE - integrated development environment (software).
 Excellent for starting to learn electronics.
 Its popularity comes from:
 built in programmer,
 microcontroller functions are organized in accessible
packages and
 programming is done using high level C++ language.
Introduction
 Suitable for both beginners and professionals.
 Advantages:
 Inexpensive,
 Cross-platform-based,
 Simple and clear programming environment,
 Open source and extensible software,
 Open source and extensible hardware.
 Large community.
How to start?
 Arduino official page – https://www.arduino.cc/
 https://playground.arduino.cc/
 https://www.instructables.com/howto/Arduino/
 https://itp.nyu.edu/physcomp/
 https://makezine.com/category/technology/arduino/
Arduino boards
ATmega328P ATmega32U4 AT91SAM3X8E

3€ 1.5€ 12€

ATmega2560 ATmega168V
ATmega328

6€ 2€ 2€
Arduino shields

3€ Ethernet WiFi
shield shield

Xbee
shield
Sensors
Arduino Uno
 Pins:
 GND
 5V and 3.3V
 Analog
 Digital
 PWM
 AREF
 Communication:
 UART
 I2C
 SPI
NodeMCU
Setup Arduino IDE

http://arduino.esp8266.com/stable/package_esp8266com_index.json
Setup Arduino IDE
Tools/Board/Board Manager
Setup Arduino IDE
Program structure
void setup()
{

// Put code that runs at the begining

}
void loop()
{

// Infinite loop

}
Reading and writing from Serial
 Serial.begin(baud) - sets the data rate in bits per
second (baud) for serial data transmission.
 Data rates: 300, 600, 1200, 2400, 4800, 9600, 14400,
19200, 28800, 38400, 57600, or 115200.
 Serial.read() – reads the first byte of incoming
serial data available. It returns -1 if there is no data.
 Serial.readString() – reads string.
 Serial.write(data) – writes data to the serial port.
 Serial.available() - returns the number of bytes
(characters) available for reading from the serial
port.
Reading and writing from Serial
char input;

void setup() {
Serial.begin(9600);
delay(2000);
Serial.println("Type something!");
}

void loop() {
if(Serial.available()){
input = Serial.read();
Serial.print("You typed: " );
Serial.println(input);
}
}
Software Serial
 Enables using several Serial ports on Arduino based
board.
 In order to use it, a library has to be included:
#include <SoftwareSerial.h>
 Creating SofrwareSerial object on D1 and D2 pins:
SoftwareSerial EEBlue(D1, D2); // RX | TX
 Limitations:
 If using multiple software serial ports, only one can receive
data at a time.
 Not supported by some pins on some boards.
 Limitations on maximum speed on RX pin.
NodeMCU and HC-05
NodeMCU and HC-05
#include <SoftwareSerial.h>
SoftwareSerial EEBlue(D1, D2); // RX | TX
void setup()
{
Serial.begin(9600);
EEBlue.begin(9600);
Serial.println("We have started...");
}
void loop()
{
// Feed any data from bluetooth to Terminal.
if (EEBlue.available()) Serial.write(EEBlue.read());

// Feed all data from termial to bluetooth


if (Serial.available()) EEBlue.write(Serial.read());
}
String manipulation
 String can be represented by:
 array of chars or
 String object.
 Declaration of char arrays:
char s1[30], s2[]=“First”;
 Creation of String objects:
String ss1, ss2=“First”;
 Converting object to array and vice versa:
ss2.toCharArray(s1, 20);
ss1 = String(s2);
Useful functions
 myString.concat(parameter)
 myString.charAt(n)
 myString.compareTo(myString2)
 myString.endsWith(myString2)
 myString.equals(myString2)
 myString.equalsIgnoreCase(myString2)
 myString.indexOf(val)
 myString.length()
 myString.toDouble()
Manipulating with I/O pins
 pinMode(pin, mode) – setting pin to act as input
or output.
 modes - INPUT, OUTPUT, or INPUT_PULLUP.
 digitalRead(pin) - reads the value from a specified
digital pin.
 output – LOW or HIGH.
 digitalWrite(pin, value) - write a HIGH or a LOW
value to a digital pin.
 analogRead(analogPin) - reads the value from
the specified analog pin. Possible values 0-1023.
 analogWrite(pin, value) - writes an analog value
(PWM wave) to a pin.
I/O pins – Example
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on

delay(1000); // wait for a second

digitalWrite(LED_BUILTIN, LOW); // turn the LED off

delay(1000); // wait for a second


}
EEPROM read and write
 EEPROM.begin(size) – EEPROM initialization.
 size – number of bytes used for reading and writing (4 to
4096).
 Writing to EEPROM:
EEPROM.write(addr, data); // store one byte
EEPROM.commit(); // after
commit function
 Reading from EEPROM:
char Data; //
why char?
Data = EEPROM.read(addr);
EEPROM write example
#include <EEPROM.h>

int addr = 0; //
Starting address
void setup()
{
EEPROM.begin(512);

EEPROM.write(addr, 'A');
addr++;

EEPROM.write(addr, 'B');
addr++;

EEPROM.write(addr, 'C');
addr++;

String www = "www.udg.edu.me";


writeString(addr, www);
EEPROM.commit(); //Store data to
EEPROM
EEPROM write example
void writeString(int addr, String s)
{
for(int i=0;i<s.length();i++)
{
EEPROM.write(addr+i,s[i]);
}
}

void loop()
{
delay(10);
}
EEPROM read example
#include <EEPROM.h>

int addr = 0;
void setup()
{
EEPROM.begin(512);
Serial.begin(9600);
Serial.println("");

Serial.print(char(EEPROM.read(addr))); addr++;

Serial.print(char(EEPROM.read(addr))); addr++;

Serial.println(char(EEPROM.read(addr))); addr++;

String www = readStringEEPROM(addr, 14);

Serial.println(www);
}
EEPROM read example
String readStringEEPROM(int addr, int numByte)
{
String s = "";
for(int i=0;i<numByte;i++)
{
s = s + char(EEPROM.read(addr+i));
}
return s;
}

void loop()
{
delay(10);
}
NodeMCU and WiFi
 Connecting to a network:
WiFi.begin(ssid, password);
 Retrieve network status:
WiFi.status() – returns WL_CONNECTED if is connected
 Getting device IP:
WiFi.localIP();
 Setting static IP:
IPAddress ip(192,168,1,200);
IPAddress gateway(192,168,1,254);
IPAddress subnet(255,255,255,0);
WiFi.config(ip, gateway, subnet);
NodeMCU and WiFi
 Setting WiFi mode:
WiFi.mode(mode);
 mode can be: WIFI_STA and WIFI_AP.
Sending HTTP GET request
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "Telia-9E09DD";


const char* password = "JOHE45SF3C";

void setup ()
{
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print("Connecting..");
}
}
Sending HTTP GET request
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;

http.begin("http://jsonplaceholder.typicode.com/users/1");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
}
http.end(); //Close connection
}
delay(30000); //Send a request every 30 seconds
}
HTTP WiFi server on AP
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

#define DHTPIN 2

const byte DNS_PORT = 53;


IPAddress apIP(192, 168, 1, 1);
DNSServer dnsServer;
ESP8266WebServer webServer(80);
DHT dht(DHTPIN, DHT11);
HTTP WiFi server on AP
void setup(void){
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP("WiFi test");
dnsServer.start(DNS_PORT, "*", apIP);
webServer.onNotFound([]() {
webServer.send(200, "text/html", webPage(""));
});
webServer.on("/Temp", [](){
webServer.send(200, "text/html", webPage("Temp: " +
String(dht.readTemperature())));
delay(100);
});

webServer.begin();
dht.begin();
Serial.begin(9600);
Serial.println("Started...");
}
HTTP WiFi server on AP

void loop(void){
dnsServer.processNextRequest();
webServer.handleClient();
delay(2000);
}
Conclusion
 A short overview of Arduino programming is given.
 We covered the following:
 Serial communication,
 I/O pin manipulations,
 EEPROM manipulation,
 Sending HTTP requests,
 Setting HTTP server on AP.
 This lecture covered only a small part of
functionalities.

You might also like