Giter Site home page Giter Site logo

iotgod / raspberrypi-iot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from corticoai/raspberrypi-iot

0.0 1.0 0.0 1.77 MB

A repo for bootstrapping an Internet of Things project on a Raspberry Pi

License: MIT License

Python 25.23% HTML 16.54% CSS 4.99% JavaScript 51.13% Shell 2.12%

raspberrypi-iot's Introduction

Control a Raspberry Pi with your phone

This is a simple example of how to get a phone and raspberry pi talking to each other wirelessly using common web technologies. This example uses Flask and React, but either could be replaced with your preferred stack. This uses:

  • Flask backend running via gunicorn that starts up on boot through systemd
  • React frontend hosted by nginx which is sent to the phone when it connects to the Pi

The included example shows how to use the app (on something like a phone) to connect your pi to a WiFi network. user interface

Requirements

  • Raspberry Pi (tested on a Raspberry Pi 3 Model B+)
  • SD card with Raspbian (tested on Stretch Lite 04-08 image)
  • A WiFi dongle (tested on this one)
  • A phone that can connect to WiFi (tested on iPhones 5+)
  • Monitor/keyboard, or an SSH connection

Set up

  • Download the latest raspbian image and flash it to an SD card
  • Insert your flashed SD card into your Raspberry Pi and connect it to a monitor and keyboard
  • Log in to the OS (default username: pi default password: raspberry)
  • Connect your pi to the internet
  • Install Ansible
    • You may need to install dirmngr first to do this (sudo apt-get -y install dirmngr)
    • You may also need to use the url hkp://keyserver.ubuntu.com:80 for the Ubuntu keyserver
  • Download this repository to your pi and make a note of the location (e.g. /home/pi/raspberrypi-iot)
  • Fill this location name in system/system.yaml on line 5
  • Configure udev (see below) and restart your pi
  • You may need to reconnect to your WiFi now that udev has changed some of the wlan assignments
    • There should now be a wlan1 and ap0. To set wlan1's WiFi settings, copy your /etc/wpa_supplicant/wpa_supplicant.conf (which should have your WiFi settings) to /etc/wpa_supplicant/wpa_supplicant-wlan1.conf. Then run wpa_cli -i wlan1 reconfigure. You should have internet again now.
    • Note: raspi-config cannot be used to change the WiFi settings anymore since the wlan assignments have changed
  • Run sudo ansible-playbook system/system.yaml. This will set up the WiFi access point as well as install the example frontend and backend services.
  • Restart the pi

If everything worked, then you should be able to see the WiFi network raspberrynet from any device capable of looking for WiFi. You should be able to connect to it with the password raspberrynet. From your connected device, go to raspberrynet.local:80 in a browser (or just raspberrynet.local) and you should see the frontend running on your pi! If your pi has ssh enabled, you should also be able to ssh [email protected].

By default, the wifi connection and hostname of the pi are raspberrynet. This can be changed by replacing raspberrynet in the following files, then running the Ansible again:

Try connecting your pi to a different WiFi network, or taking it to a library. Because the internet connection is forwarded to the phone, you can now use your phone to get the pi past any pesky splash screens asking you to agree to terms. Congrats, you're controlling your Raspberry Pi with your phone!

Configuring udev

This is the trickiest part about getting this set up correctly. The pi does not by default persist wlan assignments, so if the pi is restarted, these might get switched. Because there are two WiFi chips (the one on the pi itself and a WiFi dongle via USB), we have to tell the pi which one will be the access point, and which one will be the outgoing WiFi. The on board WiFi chip of the Raspberry 3 is capable of being an access point, whereas not all WiFi dongles are, so we assign the access point to the on board chip. The WiFi dongle will then be responsible for the outgoing internet connection.

In this set up, we call the on board chip/access point ap0 and our dongle/outgoing internet wlan1.

You will need to configure your udev rules to be as specific as possible to grab your WiFi dongle. The current ones in that file work for the WiFi dongle linked above by matching on idVendor, idProduct, and removable. You could use the MAC address of your WiFi dongle instead, but this gets tricky to scale.

To find information about your WiFi dongle:

# output info on all usb devices
> lsusb

# look for your WiFi dongle and its bus number and device number
# example output:
# Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp.... Wireless Network Adapter
# get detailed info on this usb device (using BUS then DEVICE number)
> udevadm info /dev/bus/usb/001/005

This should list all sorts of attributes about your WiFi dongle to match on.

Once you've changed your udev rules, you can see if they worked by running:

udevadm control --reload-rules && udevadm trigger

You will likely also need to unplug/plug in the WiFi dongle again. Or you could reboot the pi for the same effect.

If your udev assignment worked, you should see both wlan1 and ap0 as entries when you run ifconfig.

Further resources:

raspberrypi-iot's People

Contributors

allisonking avatar dependabot[bot] avatar

Watchers

James Cloos avatar

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.