2014-10-31 01:37:19 +00:00
|
|
|
****************************************
|
|
|
|
:mod:`network` --- network configuration
|
|
|
|
****************************************
|
|
|
|
|
|
|
|
.. module:: network
|
|
|
|
:synopsis: network configuration
|
|
|
|
|
2016-10-28 02:42:27 +01:00
|
|
|
This module provides network drivers and routing configuration. To use this
|
|
|
|
module, a MicroPython variant/build with network capabilities must be installed.
|
|
|
|
Network drivers for specific hardware are available within this module and are
|
|
|
|
used to configure hardware network interface(s). Network services provided
|
2021-08-12 04:59:29 +01:00
|
|
|
by configured interfaces are then available for use via the :mod:`socket`
|
2016-10-28 02:42:27 +01:00
|
|
|
module.
|
2014-12-04 19:43:56 +00:00
|
|
|
|
|
|
|
For example::
|
|
|
|
|
2017-04-09 11:21:35 +01:00
|
|
|
# connect/ show IP config a specific network interface
|
2014-12-04 19:43:56 +00:00
|
|
|
# see below for examples of specific drivers
|
|
|
|
import network
|
2021-08-12 04:59:29 +01:00
|
|
|
import time
|
2014-12-04 19:43:56 +00:00
|
|
|
nic = network.Driver(...)
|
2017-04-09 11:21:35 +01:00
|
|
|
if not nic.isconnected():
|
|
|
|
nic.connect()
|
|
|
|
print("Waiting for connection...")
|
|
|
|
while not nic.isconnected():
|
2021-08-12 04:59:29 +01:00
|
|
|
time.sleep(1)
|
2014-12-04 19:43:56 +00:00
|
|
|
print(nic.ifconfig())
|
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
# now use socket as usual
|
2021-08-16 14:08:20 +01:00
|
|
|
import socket
|
2014-12-04 19:43:56 +00:00
|
|
|
addr = socket.getaddrinfo('micropython.org', 80)[0][-1]
|
|
|
|
s = socket.socket()
|
|
|
|
s.connect(addr)
|
|
|
|
s.send(b'GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n')
|
|
|
|
data = s.recv(1000)
|
|
|
|
s.close()
|
|
|
|
|
2017-04-09 11:21:35 +01:00
|
|
|
Common network adapter interface
|
|
|
|
================================
|
|
|
|
|
|
|
|
This section describes an (implied) abstract base class for all network
|
2020-06-04 02:38:45 +01:00
|
|
|
interface classes implemented by :term:`MicroPython ports <MicroPython port>`
|
2017-08-28 11:51:05 +01:00
|
|
|
for different hardware. This means that MicroPython does not actually
|
|
|
|
provide ``AbstractNIC`` class, but any actual NIC class, as described
|
2017-04-09 11:21:35 +01:00
|
|
|
in the following sections, implements methods as described here.
|
|
|
|
|
|
|
|
.. class:: AbstractNIC(id=None, ...)
|
|
|
|
|
|
|
|
Instantiate a network interface object. Parameters are network interface
|
|
|
|
dependent. If there are more than one interface of the same type, the first
|
|
|
|
parameter should be `id`.
|
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.active([is_active])
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Activate ("up") or deactivate ("down") the network interface, if
|
|
|
|
a boolean argument is passed. Otherwise, query current state if
|
|
|
|
no argument is provided. Most other methods require an active
|
2021-04-30 07:53:36 +01:00
|
|
|
interface (behaviour of calling them on inactive interface is
|
2017-04-09 11:21:35 +01:00
|
|
|
undefined).
|
|
|
|
|
2020-07-11 07:53:26 +01:00
|
|
|
.. method:: AbstractNIC.connect([service_id, key=None, *, ...])
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Connect the interface to a network. This method is optional, and
|
|
|
|
available only for interfaces which are not "always connected".
|
|
|
|
If no parameters are given, connect to the default (or the only)
|
|
|
|
service. If a single parameter is given, it is the primary identifier
|
|
|
|
of a service to connect to. It may be accompanied by a key
|
|
|
|
(password) required to access said service. There can be further
|
|
|
|
arbitrary keyword-only parameters, depending on the networking medium
|
|
|
|
type and/or particular device. Parameters can be used to: a)
|
2019-02-13 01:29:01 +00:00
|
|
|
specify alternative service identifier types; b) provide additional
|
2017-04-09 11:21:35 +01:00
|
|
|
connection parameters. For various medium types, there are different
|
|
|
|
sets of predefined/recommended parameters, among them:
|
|
|
|
|
2017-10-05 05:27:50 +01:00
|
|
|
* WiFi: *bssid* keyword to connect to a specific BSSID (MAC address)
|
2017-04-09 11:21:35 +01:00
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.disconnect()
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Disconnect from network.
|
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.isconnected()
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Returns ``True`` if connected to network, otherwise returns ``False``.
|
|
|
|
|
2020-07-11 07:53:26 +01:00
|
|
|
.. method:: AbstractNIC.scan(*, ...)
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Scan for the available network services/connections. Returns a
|
|
|
|
list of tuples with discovered service parameters. For various
|
|
|
|
network media, there are different variants of predefined/
|
|
|
|
recommended tuple formats, among them:
|
|
|
|
|
2022-06-04 11:32:08 +01:00
|
|
|
* WiFi: (ssid, bssid, channel, RSSI, security, hidden). There
|
2017-04-09 11:21:35 +01:00
|
|
|
may be further fields, specific to a particular device.
|
|
|
|
|
|
|
|
The function may accept additional keyword arguments to filter scan
|
|
|
|
results (e.g. scan for a particular service, on a particular channel,
|
|
|
|
for services of a particular set, etc.), and to affect scan
|
|
|
|
duration and other parameters. Where possible, parameter names
|
|
|
|
should match those in connect().
|
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.status([param])
|
2017-04-09 11:21:35 +01:00
|
|
|
|
2017-10-06 00:57:51 +01:00
|
|
|
Query dynamic status information of the interface. When called with no
|
|
|
|
argument the return value describes the network link status. Otherwise
|
|
|
|
*param* should be a string naming the particular status parameter to
|
|
|
|
retrieve.
|
|
|
|
|
|
|
|
The return types and values are dependent on the network
|
|
|
|
medium/technology. Some of the parameters that may be supported are:
|
|
|
|
|
|
|
|
* WiFi STA: use ``'rssi'`` to retrieve the RSSI of the AP signal
|
|
|
|
* WiFi AP: use ``'stations'`` to retrieve a list of all the STAs
|
|
|
|
connected to the AP. The list contains tuples of the form
|
|
|
|
(MAC, RSSI).
|
2017-04-09 11:21:35 +01:00
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.ifconfig([(ip, subnet, gateway, dns)])
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Get/set IP-level network interface parameters: IP address, subnet mask,
|
|
|
|
gateway and DNS server. When called with no arguments, this method returns
|
|
|
|
a 4-tuple with the above information. To set the above values, pass a
|
|
|
|
4-tuple with the required information. For example::
|
|
|
|
|
|
|
|
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
|
|
|
|
|
2018-09-26 08:11:47 +01:00
|
|
|
.. method:: AbstractNIC.config('param')
|
|
|
|
AbstractNIC.config(param=value, ...)
|
2017-04-09 11:21:35 +01:00
|
|
|
|
|
|
|
Get or set general network interface parameters. These methods allow to work
|
|
|
|
with additional parameters beyond standard IP configuration (as dealt with by
|
2017-06-25 22:37:30 +01:00
|
|
|
`ifconfig()`). These include network-specific and hardware-specific
|
2017-10-06 00:57:51 +01:00
|
|
|
parameters. For setting parameters, the keyword argument
|
2017-04-09 11:21:35 +01:00
|
|
|
syntax should be used, and multiple parameters can be set at once. For
|
|
|
|
querying, a parameter name should be quoted as a string, and only one
|
|
|
|
parameter can be queried at a time::
|
|
|
|
|
2022-06-04 11:32:08 +01:00
|
|
|
# Set WiFi access point name (formally known as SSID) and WiFi channel
|
|
|
|
ap.config(ssid='My AP', channel=11)
|
2017-04-09 11:21:35 +01:00
|
|
|
# Query params one by one
|
2022-06-04 11:32:08 +01:00
|
|
|
print(ap.config('ssid'))
|
2017-04-09 11:21:35 +01:00
|
|
|
print(ap.config('channel'))
|
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
Specific network class implementations
|
|
|
|
======================================
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
The following concrete classes implement the AbstractNIC interface and
|
|
|
|
provide a way to control networking interfaces of various kinds.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
network.WLAN.rst
|
|
|
|
network.WLANWiPy.rst
|
|
|
|
network.WIZNET5K.rst
|
2021-06-18 16:12:44 +01:00
|
|
|
network.LAN.rst
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
Network functions
|
|
|
|
=================
|
2015-08-05 12:36:29 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
The following are functions available in the network module.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2023-02-01 03:25:12 +00:00
|
|
|
.. function:: country([code])
|
|
|
|
|
|
|
|
Get or set the two-letter ISO 3166-1 Alpha-2 country code to be used for
|
|
|
|
radio compliance.
|
|
|
|
|
|
|
|
If the *code* parameter is provided, the country will be set to this value.
|
|
|
|
If the function is called without parameters, it returns the current
|
|
|
|
country.
|
|
|
|
|
|
|
|
The default code ``"XX"`` represents the "worldwide" region.
|
|
|
|
|
|
|
|
.. function:: hostname([name])
|
|
|
|
|
2023-09-04 03:50:59 +01:00
|
|
|
Get or set the hostname that will identify this device on the network. It will
|
|
|
|
be used by all interfaces.
|
2023-02-01 03:25:12 +00:00
|
|
|
|
|
|
|
This hostname is used for:
|
|
|
|
* Sending to the DHCP server in the client request. (If using DHCP)
|
|
|
|
* Broadcasting via mDNS. (If enabled)
|
|
|
|
|
|
|
|
If the *name* parameter is provided, the hostname will be set to this value.
|
|
|
|
If the function is called without parameters, it returns the current
|
|
|
|
hostname.
|
|
|
|
|
2023-09-04 03:50:59 +01:00
|
|
|
A change in hostname is typically only applied during connection. For DHCP
|
|
|
|
this is because the hostname is part of the DHCP client request, and the
|
|
|
|
implementation of mDNS in most ports only initialises the hostname once
|
|
|
|
during connection. For this reason, you must set the hostname before
|
|
|
|
activating/connecting your network interfaces.
|
|
|
|
|
2023-09-29 13:49:49 +01:00
|
|
|
The length of the hostname is limited to 32 characters.
|
|
|
|
:term:`MicroPython ports <MicroPython port>` may choose to set a lower
|
|
|
|
limit for memory reasons. If the given name does not fit, a `ValueError`
|
|
|
|
is raised.
|
|
|
|
|
2023-02-01 03:25:12 +00:00
|
|
|
The default hostname is typically the name of the board.
|
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
.. function:: phy_mode([mode])
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
Get or set the PHY mode.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2023-02-01 03:25:12 +00:00
|
|
|
If the *mode* parameter is provided, the PHY mode will be set to this value.
|
|
|
|
If the function is called without parameters, it returns the current PHY
|
|
|
|
mode.
|
2015-08-05 12:36:29 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
The possible modes are defined as constants:
|
|
|
|
* ``MODE_11B`` -- IEEE 802.11b,
|
|
|
|
* ``MODE_11G`` -- IEEE 802.11g,
|
|
|
|
* ``MODE_11N`` -- IEEE 802.11n.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-09-26 08:07:38 +01:00
|
|
|
Availability: ESP8266.
|