In this paper, we design and experiment ODYSSE (Opportunistic Duty cYcle based routing protocol for wirelesS Sensor nEtworks) protocol. It combines three main mechanisms: (i) duty cycle, where nodes alternate between active and sleep states, (ii) opportunistic routing where routing tables do not exist and the next hop is elected once the packet arrives, and (iii) source coding with LDPC (Low-Density Parity-Check) codes in order to face packet losses while minimizing energy consumption. We focus on two heterogeneous scenarios: bulk image transmission and infrequent events reporting. Modeling the average waiting delay of forwarders, we show that simple relay selection strategies are effective. We used 45 Arduino nodes communicating with IEEE 802.15.4 (XBee) within the large platform FIT IoT-LAB (IoT-LAB is part of the large platform FIT: Future Internet of Things). We implement and extensively study the behavior and performance of our proposal ODYSSE. We show that the three techniques fit perfectly, yielding a robust low complexity protocol for highly constrained nodes in typical IoT applications.