% Tikz File mqtt_pub_sub.tex \documentclass{standalone} \usepackage{tikz} \usepackage{graphicx} \begin{document} \begin{tikzpicture} %\draw[help lines] (-7,-5) grid (7,5); % Broker \draw (0,0) circle (2); \node[] at (0,-1.5) (broker) {\textbf{Broker}}; \node[inner sep=0pt] (broker_pc) at (0,0) {\includegraphics[width=0.1\textwidth]{images/pc.png}}; % Publisher \pgfmathsetmacro\xl{-6}; \pgfmathsetmacro\xr{-3}; \pgfmathsetmacro\w{(\xl+\xr)}; \pgfmathsetmacro\y{6}; % Text \node[] at (\w/2,-\y/2-0.25) (pubs) {\textbf{MQTT Clients}}; % Images \node[inner sep=0pt] (laptop) at (\w/2,\y/3) {\includegraphics[width=0.1\textwidth]{images/laptop.png}}; \node[inner sep=0pt] (mcu) at (\w/2,\y/3-\y/3) {\includegraphics[width=0.1\textwidth]{images/muc.png}}; \node[inner sep=0pt] (pc) at (\w/2,\y/3-\y/3-\y/3) {\includegraphics[width=0.1\textwidth]{images/pc.png}}; \draw (\xl-0.25, \y/2-0.25) -- (\xl-0.25, -\y/2+0.25); % left \draw (\xl, \y/2) arc (90:180:0.25); % top left \draw (\xl, \y/2) -- (\xr, \y/2); % top \draw (\xr+0.25, \y/2-0.25) arc (0:90:0.25); % top right \draw (\xr+0.25, \y/2-0.25) -- (\xr+0.25, -\y/2+0.25); % right \draw (\xr, -\y/2) arc (270:360:0.25); % bottom right \draw (\xl,-\y/2) -- (\xr,-\y/2); % bottom \draw (\xl-0.25, -\y/2+0.25) arc (180:270:0.25); % bottom left % Subscriber \pgfmathsetmacro\xl{3} \pgfmathsetmacro\xr{6} \pgfmathsetmacro\w{(\xl+\xr)}; \pgfmathsetmacro\y{6} \node[] at (\w/2,-\y/2-0.25) (subs) {\textbf{MQTT Clients}}; % Images \node[inner sep=0pt] (server) at (\w/2,\y/3-1) {\includegraphics[width=0.1\textwidth]{images/server.png}}; \node[inner sep=0pt] (sub_mcu) at (\w/2,\y/3-3) {\includegraphics[width=0.1\textwidth]{images/muc.png}}; \draw (\xl-0.25, \y/2-0.25) -- (\xl-0.25, -\y/2+0.25); % left \draw (\xl, \y/2) arc (90:180:0.25); % top left \draw (\xl, \y/2) -- (\xr, \y/2); % top \draw (\xr+0.25, \y/2-0.25) arc (0:90:0.25); % top right \draw (\xr+0.25, \y/2-0.25) -- (\xr+0.25, -\y/2+0.25); % right \draw (\xr, -\y/2) arc (270:360:0.25); % bottom right \draw (\xl,-\y/2) -- (\xr,-\y/2); % bottom \draw (\xl-0.25, -\y/2+0.25) arc (180:270:0.25); % bottom left % arrows \draw[ultra thick, ->] (mcu) -- (broker_pc); \draw[ultra thick, ->] (laptop) -- (broker_pc); \draw[ultra thick, ->] (pc) -- (broker_pc); \draw[ultra thick, ->] (sub_mcu) -- (broker_pc); \draw[dashed, ultra thick, <-] (server) -- (broker_pc); \draw[dashed, ultra thick, ->] (broker_pc.10) to (sub_mcu.north west); % legend \draw[dashed, ultra thick, ->] (-4,-4) -- (-1,-4); \node[] (Sub) at (-2.5,-4.25) {Subscribe}; \draw[ultra thick, ->] (1,-4) -- (4,-4); \node[] (Pub) at (2.5,-4.25) {Publish}; \end{tikzpicture} \end{document}