2023-09-08 16:34:42 +08:00
|
|
|
.. zephyr:code-sample:: cellular-modem
|
|
|
|
:name: Cellular modem
|
2023-06-07 18:40:29 +08:00
|
|
|
|
2023-09-08 16:34:42 +08:00
|
|
|
Use a cellular modem to communicate with a UDP server.
|
2023-06-07 18:40:29 +08:00
|
|
|
|
|
|
|
Overview
|
|
|
|
********
|
|
|
|
|
|
|
|
This sample consists of a simple application which powers on
|
|
|
|
the modem, brings up the net interface, then sends a packet
|
|
|
|
with pseudo random data to the endpoint test-endpoint.com,
|
|
|
|
which is a publicly hosted server which runs the Python
|
|
|
|
script found in the server folder. DNS is used to look
|
|
|
|
up the IP of test-endpoint.com.
|
|
|
|
|
|
|
|
Notes
|
|
|
|
*****
|
|
|
|
|
2024-02-21 19:36:22 +08:00
|
|
|
This sample uses the devicetree alias ``modem`` to identify
|
2023-06-07 18:40:29 +08:00
|
|
|
the modem instance to use. The sample also presumes that
|
2024-02-14 14:43:10 +08:00
|
|
|
the modem driver creates the only PPP network interface.
|
2023-06-07 18:40:29 +08:00
|
|
|
|
|
|
|
Setup
|
|
|
|
*****
|
|
|
|
|
|
|
|
Start by setting up the devicetree with the required
|
|
|
|
devicetree node:
|
|
|
|
|
|
|
|
.. code-block:: devicetree
|
|
|
|
|
|
|
|
/dts-v1/;
|
|
|
|
|
|
|
|
/ {
|
|
|
|
aliases {
|
|
|
|
modem = &modem;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
&usart2 {
|
|
|
|
pinctrl-0 = <&usart2_tx_pa2 &usart2_rx_pa3 &usart2_rts_pa1 &usart2_cts_pa0>;
|
|
|
|
pinctrl-names = "default";
|
|
|
|
current-speed = <115200>;
|
|
|
|
hw-flow-control;
|
|
|
|
status = "okay";
|
|
|
|
|
|
|
|
modem: modem {
|
|
|
|
compatible = "quectel,bg9x";
|
|
|
|
mdm-power-gpios = <&gpioe 2 GPIO_ACTIVE_HIGH>;
|
|
|
|
mdm-reset-gpios = <&gpioe 3 GPIO_ACTIVE_HIGH>;
|
|
|
|
status = "okay";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
Next, the UART API must be specified using ``CONFIG_UART_INTERRUPT_DRIVEN=y`` or
|
|
|
|
``CONFIG_UART_ASYNC_API=y``. The driver doesn't support UART polling.
|
|
|
|
|
|
|
|
Lastly, the APN must be configured using ``CONFIG_MODEM_CELLULAR_APN=""``.
|